Python 列表作为默认参数的陷阱
2015-09-08 10:13
239 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/pilicurg/article/details/48287269
如果将一个列表作为默认参数传递给函数,在函数内部对列表操作后会怎样呢?我们看下面的代码:
def func(L=[]): L.append(1) return L print func() print func() print func()
函数func()接受一个参数,这个参数的默认值是个空列表,在函数体里这个空列表被追加一个元素1,函数最后返回这个列表。当3个完全相同的函数被执行3次后,返回值会是怎么样?结果是
[1] [1, 1] [1, 1, 1]
这是因为函数的默认参数只运算一次,如果这个默认参数是可变的,那么这个参数的变化就会在函数每次被调用时积累下来。
作为对比,如果代码改为:
def func(): L=[] L.append(1) return L print func() print func() print func()
结果就变成
[1] [1] [1]
相关文章推荐
- Python陷阱:为什么不能用可变对象作为默认参数的值
- 程序员必知的 Python 陷阱与缺陷列表
- Python 陷阱与缺陷列表
- 程序员老司机都要错的 Python 陷阱与缺陷列表
- Python 使用 list 作为函数参数时,默认参数的内存地址是同一个!
- python之列表作为函数的参数
- 程序员必知的 Python 陷阱与缺陷列表
- 程序员老司机都要错的 Python 陷阱与缺陷列表
- Python为何不能用可变对象作为默认参数的值
- Python:列表作为参数
- 精简代码:Python的split方法函数可以分割字符串成列表,默认是以空格作为分隔符sep来分割字符串。
- Python默认参数的设计陷阱
- 程序员必知的Python陷阱与缺陷列表
- python 清空列表时的陷阱
- Python 使用列表作为函数默认值且为空
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- Python零基础之默认参数的陷阱
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- 程序员必知的 Python 陷阱与缺陷列表
- python--可变对象作为默认参数