`
windytwang
  • 浏览: 50953 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Python默认参数为list,dict的话,只会初始化一次

阅读更多

最近发现一个非常诡异的BUG,找了半天,才知道python函数的默认参数为dict的话,只会初始化一次

汗,孤陋寡闻了。。

 

如 def a( xxx = {} ):

xxx.apend(11)  

print xxx

 

a()

a()

a()

 

输出为

11

11 11

11 11 11

而非

11

11

11

 

切记切记,共习之

1
0
分享到:
评论
3 楼 simomo 2011-04-27  
哈哈~ 和我前一段遇到的问题很相似呢~
我把datetime.datetime.now()的值作为参数的默认值,
def get_now(now = datetime.datetime.now()):
    print now
结果每次调用get_now()打印出来的“当前时间”都是一个值~
给我郁闷坏了~

后来dir了get_now这个方法,发现这个方法一旦定义,它的__defaults__属性就已经填写好了~ 所以“当前时间”永远都是定义这个方法的那一刻~
2 楼 windytwang 2011-04-04  
嗯,写错了。
是不是BUG,是因为我没有注意到这个特性,引起了BUG:)
不过这点跟其它语言挺不一样
1 楼 jianpx 2011-04-03  
写错了吧。。。x=[]才对阿。。。
这个不是bug, 是需要默认参数的时候要注意的地方。。。

相关推荐

    python去重,一个由dict组成的list的去重示例

    ### Python去重——一个由dict组成的list的去重方法 在Python编程中,经常会遇到需要对数据进行处理的情况,特别是当涉及到数据清洗时,去除重复数据是一项非常重要的任务。本篇文章将详细介绍如何对一个由字典...

    python中的list、tuple、set、dict用法简析.doc

    Tuple 也是一种有序的列表,但与 List 不同的是,Tuple 一旦初始化就不能再修改。Tuple 的元素可以是字符串、数字、布尔值等,但不能包含列表。 Tuple 的定义可以使用小括号 (),例如: `classmates = ('Michael',...

    python-student-list

    在Python编程语言中,列表(List)是一种非常重要的数据结构,它允许我们存储一系列的元素,这些元素可以是任意类型,如整数、浮点数、字符串甚至是其他对象。"python-student-list"这个主题恰好涉及到如何使用列表...

    Python-中LIST操作.docx

    - 初始化列表时,可以使用列表推导式,如`sample_list = [initial_value for i in range(10)]`,或者使用乘法运算符`*`,如`sample_list = [initial_value]*list_length`。 8. **列表的方法**: - `append()`:向...

    Python Dict用法.rar

    Python字典(Dict)是其内置数据类型之一,是一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。字典的关键特性是通过键(Key)来访问对应的值(Value),这使得字典在处理键值对的数据...

    Python的dict字典结构操作方法学习笔记

    另外,你可以直接初始化字典,提供键值对,例如`dict1 = {1: 'a', 2: 'b', 3: 'c'}`。此外,你还可以利用元组创建字典,如`dict1 = dict([(1, 'a'), (2, 'b'), (3, 'c')])`。 获取字典中的元素主要通过键来实现。`...

    python 默认参数相关知识详解

    值得注意的是,一旦函数被定义,默认参数只会在定义的时候被赋值一次。如果函数被调用多次,而没有为默认参数提供新的值,则该参数会一直使用第一次定义时的值。这在使用可变类型作为默认参数时可能会引发问题,例如...

    Python教程大全入门到实战

    为什么学Python? Python代码规范 简明概述 注释 命名规范 第一个Python程序 Python 简介 Python 的安装 第一个 Python 程序 集成开发环境(IDE): PyCharm 基本数据类型和变量 Python 语法的简要说明 print() 函数 ...

    Python3.7.2中文文档-5.Python扩展和嵌入Python解释器

    初始化过程会设置Python的全局状态,包括内存管理、模块搜索路径等。 2. **执行Python代码**:通过`PyRun_SimpleString()`或`PyRun_SimpleFile()`函数可以执行字符串或文件中的Python代码。也可以创建`PyObject`...

    最新python面试题及答案.doc

    `__init__`是初始化方法,用于设置对象属性,它会在`__new__`之后调用,对`__new__`返回的对象进行进一步初始化。 9. **with语句**:with语句提供了一种简洁的方式来确保资源在使用后会被正确释放,例如文件操作。...

    Python实现初始化不同的变量类型为空值

    在Python编程语言中,初始化变量为空值是常见的操作,特别是在创建新对象或声明变量时。本文将详细讨论如何为不同类型的变量设置空值,并探讨`None`与空字符串`''`的区别。 首先,让我们逐一了解如何初始化不同类型...

    简明 Python 教程 Python3

    面向对象编程在Python3中同样得到充分支持,类定义使用class关键字,通过__init__方法初始化对象,继承(inheritance)和多态(polymorphism)使得代码更具复用性和灵活性。 Python3的控制流语句包括条件判断(if/...

    python面试题汇总(

    而__init__是一个实例方法,用于初始化对象,是在__new__方法返回对象实例后被调用。 12. Python中的with语句是一种上下文管理器,它可以简化文件等资源的管理操作。使用with语句可以避免忘记关闭文件,它会在代码...

    Python面试题笔记

    - `__init__`方法则是对这个实例进行初始化的操作,有一个`self`参数,即由`__new__`返回的实例。`__init__`不需要返回值。 #### 10. 使用`with`方法 `with`语句提供了一种方便的方式来处理资源,如文件、网络连接...

    python自动格式化json文件的方法

    - `__init__`:初始化实例,设定缩进量和文件名,同时初始化一个栈来存储格式化后的字符串片段,一个变量来存储解析的对象,以及一个变量来存储原始的JSON字符串。 - `json_str`:这是一个静态方法,用于返回加了双...

    python2712.rar

    1. **内置类型和模块**:Python 提供了一系列内置类型,如整型(int)、浮点型(float)、字符串(str)、列表(list)、字典(dict)等。同时,有许多内置模块,例如 `os` 用于操作系统交互,`sys` 用于系统相关的...

    Python-一个脚本和Notebook中的Python快速参考

    5. **类与对象**: Python是面向对象的语言,通过`class`定义类,使用`__init__`方法初始化对象。类可以包含属性(成员变量)和方法(成员函数),实现封装、继承和多态。 6. **标准库与第三方库**: Python拥有丰富...

    python_note.pdf

    - 类的初始化方法__init__。 - 类的属性和方法。 - self参数,它代表类的实例本身。 - 类的特殊方法,如__del__(析构方法)和__str__(转换为字符串)。 8. Python代码的模块化和封装: - 如何导入模块...

    Python-一图了解Python3基本用法

    同时,它提供了一系列内置数据结构,如列表(list)、元组(tuple)、集合(set)和字典(dict),它们各有特点,适用于不同场景。 在Python3中,字符串处理强大而灵活,支持格式化输出(f-string)、索引与切片、...

    Python-全面Python编程速查表

    - 类定义:class关键字,__init__方法初始化对象。 - 继承:一个类可以继承另一个类,使用super()调用父类方法。 - 多态:不同类的对象可以调用相同的接口(方法)。 - 封装:通过访问修饰符(public、private)...

Global site tag (gtag.js) - Google Analytics