Python 列表作为默认参数的陷阱
来源:互联网 发布:网络公关服务规范 编辑:程序博客网 时间:2024/05/02 04:57
如果将一个列表作为默认参数传递给函数,在函数内部对列表操作后会怎样呢?我们看下面的代码:
def func(L=[]): L.append(1) return Lprint func()print func()print func()
函数func()接受一个参数,这个参数的默认值是个空列表,在函数体里这个空列表被追加一个元素1,函数最后返回这个列表。当3个完全相同的函数被执行3次后,返回值会是怎么样?结果是
[1][1, 1][1, 1, 1]
这是因为函数的默认参数只运算一次,如果这个默认参数是可变的,那么这个参数的变化就会在函数每次被调用时积累下来。
作为对比,如果代码改为:
def func(): L=[] L.append(1) return Lprint func()print func()print func()
结果就变成
[1][1][1]
原文链接:http://www.lfhacks.com/tech/python-list-parameter
0 0
- Python 列表作为默认参数的陷阱
- Python默认参数的设计陷阱
- Python:列表作为参数
- Python函数默认参数的一个小陷阱
- Python函数默认参数的一个小陷阱
- python 当list,dic作为默认参数的正确写法
- 字符串常量作为模板参数的陷阱
- 指针作为参数传入函数的陷阱
- python--可变对象作为默认参数
- python中函数默认参数的陷阱(《改善python程序的91个建议》)
- [被坑纪念][转帖]Python函数默认参数的一个小陷阱
- python 清空列表时的陷阱
- 默认参数提升在可变参数函数的陷阱
- python使用变量作为默认参数时所遇到的奇怪问题
- python勿使用mutable值作为默认参数
- python:线程的使用、线程共享全局变量、列表作为参数(全局变量)、避免全局变量被修改
- python 可变参数的一个陷阱
- Python函数参数默认值的陷阱
- linux设备驱动归纳总结(一):内核的相关基础概念
- 如何让new操作符不分配内存,只调用构造函数
- win7下如何建立ftp服务器
- php学习--4 正则表达式
- eclipse 报错 java compiler level does not match the version of the installed java project
- Python 列表作为默认参数的陷阱
- Win7下php运行环境搭建
- Session详解【转】
- 数据库中的一个表始终修复不成功
- Leetcode Algorithm No.242 Valid Anagram
- Android 播放视频的四种方法
- oracle function
- scanf用法
- 计算机网络学习——03