`
windytwang
  • 浏览: 49880 次
  • 性别: 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教程大全入门到实战

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

    python中dict()的高级用法实现

    defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值。 当然这个默认的容器不一定是 list, 也可以是集合 set。 根据自己的需求选择使用 list 还是 set 。如果你想保持元素的插入顺序

    深入理解Python中变量赋值的问题

    Python是动态类型语言,也就是说不需要预先声明变量类型,变量的类型和值在赋值那一刻被初始化,下面详细介绍了Python的变量赋值问题,一起来学习学习吧。 我们先看一下如下代码: c = {} def foo(): f = dict(zip...

    reprint:一个Python 23模块,用于绑定变量并刷新终端中的多行输出

    with块一起使用以控制初始化, output对象包含以下参数: output_type : "list"或"dict" (默认值: "list" ),指示列表模式或dict模式。 initial_len : int (默认值: 1 ),仅在列表模式下工作,指示列表的...

    简介Python的collections模块中defaultdict类型的用法

    defaultdict 主要用来需要对 value 做初始化的情形。对于字典来说,key 必须是 hashable,immutable,unique 的数据,而 value 可以是任意的数据类型。如果 value 是 list,dict 等数据类型,在使用之前必须初始化为...

    python从入门到机器学习

    最近刚好有时间,前面一段时间看了tensorflow,看了深度学习的理论,可是自己还不会python。...2)tuple:a(1,2,3)一旦初始化,就不能改变内容 3)dict:{‘a’:1,’b’:2,’c’:3}key:value(dict中的key值不能改变)

    利用Pandas 创建空的DataFrame方法

    一用到Pandas的DataFrame数据结构也就总想着初始化一个空的DataFrame,虽然没什么太大的用处,不过还是记录一下: # 创建一个空的 DataFrame df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D']) 上面创建的...

    python 容器总结整理

    初始化: a={‘lyt':90} 添加: a[‘zxw']=91 访问: 1.a[key] 不存在会出错 2.a.get(key) 不存在返回None 3.a.get(key,val1) 不存在返回指定的val1 ####判断: >>>key in a True/False 删除: a.pop...

    基于twisted实现的智能dns系统smartdns.zip

    初始化阶段,会生成一个名为iphash的dict,具体数据结构如下图: 其中,iphash的key为ip.csv每一条记录的起始IP,value为一个list,list长度为6,list前5个字段分别为以该 key为起始IP记录的IP段截止、IP段所属国家...

    disbord.py:discord.py的框架,可轻松制作机器人(公共或私有)

    class Name[inherits](*args, **kwargs) -名称为Name类对象,从args和kwargs inherits和初始化args inherits 。 name: type变量,名称为name ,类型为type 。 name(*args, **kwargs) -> type函数,名称为name ,...

    flask-api:Flask的可浏览Web API

    + 使用pip安装: $ pip install Flask-API 导入并初始化您的应用程序: from flask_api import FlaskAPIapp = FlaskAPI ( __name__ )回应照常返回任何有效的响应对象,或者返回list或dict 。 @ app . route ( '/...

    pytorch-ssd:源程序来自于:https

    补充部分:(1)原程序无法在断网的情况下进行初始化网络,原因在于加载vgg16预训练模型的时候从torchvision.models.vgg16正在加载,需要联网,本程序将model.py中的这三行代码keys())更改为:vgg16_model_path ...

Global site tag (gtag.js) - Google Analytics