最近相继遇到几个python的坑...贴一段有意思的代码
def a(b=[]):
b.append(1)
return b
print a()
print a()
输出是什么?
>> [1]
>> [1, 1]
我对python没系统的了解过, 大概只能猜到函数在调用前应该已经生成了这个对象, 而且直接返回指针, 如果不知道的话很容易撞坑上
def a(b=None):
if not b:
b = []
b.append(1)
return b
a正常应该这样写, 不过这个特性或许可以利用.. 比如, 好吧没想到. 不过传入一个初始化的对象的话不会有这个问题。。
Python的默认参数最好是一个不可变对象。用可变对象做默认参数就容易出问题。
Python的循环内局部变量在循环外也可以访问,也有点类似。
这个特性让python看起来不是很严禁。