Python函数参数默认值的陷阱
2014-08-11 15:50
218 查看
Python函数参数默认值的陷阱
博客分类:Python基础
阅读下面一段Python代码
Python代码
def testMutablePara1(a,l=[]):
l.append(a)
return l
print testMutablePara1(1)
print testMutablePara1(2)
初看之下,这段代码在第二次应该输出[2]
但是运行结果却是
[1]
[1, 2]
为什么呢?
这是因为Python在处理函数定义时,除了将函数的代码定义到内存中以外,同时会将默认值参数的值作为对象存放到内存中,以后每次调用都使用的都是内存中该默认值的对象,所以当参数默认值是mutable对象,如list、dict等时,每次调用都有可能使结果出现错误的结果。
替代的方法是,将默认值参数用None,而在使用之前显式地进行初始化
如下所示
Python代码
def testMutablePara2(a,l=None):
if l==None:
l=[]
l.append(a)
return l
print testMutablePara2(1)
print testMutablePara2(2)
这样就能输出符合预期的结果了。
相关文章推荐
- Python函数与类参数默认值陷阱
- Python函数参数默认值的陷阱和原理深究
- Python中定义函数时参数有默认值的小陷阱
- Python函数参数默认值的陷阱和原理深究
- Python函数参数默认值的陷阱和原理深究"
- Python函数参数默认值的陷阱和原理深究(转)
- 【转载】Python函数参数默认值的陷阱和原理深究
- Python函数参数默认值的陷阱和原理深究
- [Python]在python中获取函数的参数名和参数名的默认值
- python中函数默认参数的陷阱(《改善python程序的91个建议》)
- Python3基础 函数 默认值参数示例
- 深入讲解Python函数中参数的使用及默认参数的陷阱
- 深入讲解Python函数中参数的使用及默认参数的陷阱
- python tips - 注意函数参数的默认值
- 深入讨论Python函数的参数的默认值所引发的问题的原因
- Python(8)函数之普通参数、参数默认值、可变参数、关键字参数、命名关键字参数及递归函数
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- 陷阱!python参数默认值
- python tips - 注意函数参数的默认值-默认参数-可选参数
- python函数之_默认值参数总结