您的位置:首页 > 编程语言 > Python开发

python之疑惑函数默认初始化

2016-02-23 17:01 435 查看
def extendList(val, list=[]):
list.append(val)
return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1 ,
print "list2 = %s" % list2
print "list3 = %s" % list3

许多人会错误的认为
list1
应该等于
[10]
以及
list3
应该等于
['a']
。认为
list
的参数会在
extendList
每次被调用的时候会被设置成它的默认值
[]
。尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当
extendList
没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。因此,
list1
list3
是操作的相同的列表。而 ````list2
是操作的它创建的独立的列表(通过传递它自己的空列表作为
list``` 参数的值)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: