读书人

Python默许参数为list,dict的话只会

发布时间: 2012-12-18 12:43:41 作者: rapoo

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 楼 jianpx 2011-04-03 写错了吧。。。x=[]才对阿。。。
这个不是bug, 是需要默认参数的时候要注意的地方。。。 2 楼 windytwang 2011-04-04 嗯,写错了。
是不是BUG,是因为我没有注意到这个特性,引起了BUG:)
不过这点跟其它语言挺不一样
3 楼 simomo 2011-04-27 哈哈~ 和我前一段遇到的问题很相似呢~
我把datetime.datetime.now()的值作为参数的默认值,
def get_now(now = datetime.datetime.now()):
print now
结果每次调用get_now()打印出来的“当前时间”都是一个值~
给我郁闷坏了~

后来dir了get_now这个方法,发现这个方法一旦定义,它的__defaults__属性就已经填写好了~ 所以“当前时间”永远都是定义这个方法的那一刻~

读书人网 >perl python

热点推荐