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
许多人会错误的认为
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``` 参数的值)。
相关文章推荐
- [Leetcode]@python 95. Unique Binary Search Trees II
- cmd和python的mysql连接方法
- [Leetcode]@python 94. Binary Tree Inorder Traversal
- PyQt4 Python GUI窗体应用程序
- [Leetcode]@python 93. Restore IP Addresses
- python k-近邻算法
- Python练习-- slice
- Python练习-- loop
- Python练习-- list and tuple
- Python练习-- iterator
- Python练习-- condition
- [Leetcode]@python 92. Reverse Linked List II
- Python subprocess模块总结
- Python练习--character
- [解决] python WindowsError: [Error 3]
- Eclipse搭建Python开发环境+Python中文处理
- [Leetcode]@python 91. Decode Ways
- Python学习笔记_判断和循环
- Windows下Python开发环境搭建及 Python的HelloWorld示例
- python内置模块(四)