为什么python默认参数一定要指向不可变对象
2019-05-10 20:43
507 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44831499/article/details/90083618
python语言中,函数的默认参数必须指向不可变对象。
举个简单的例子:
def test(L=[]): L.append('a') return L print(test()) print(test()) print(test())
得到的结果是:
['a'] ['a', 'a'] ['a', 'a', 'a']
原因就在于函数的默认参数在函数定义时就已经被计算出来了,也就是L指向的内存位置已经确定,在调用test()函数改变了L的内容后,再次调用test(),默认参数L的内容就已经发生了变化。
如果想把默认参数设置为空列表,可以这么做:
def test(L=None): if L is None: L = [] L.append('a') return L
相关文章推荐
- Python的坑(7) -- 定义默认参数要牢记一点:默认参数必须指向不变对象!
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- python不可“用可变对象作默认参数”
- Python——可变类型与不可变类型(即为什么函数默认参数要用元组而非列表)
- 默认参数必须指向不变对象!
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- 关于Python参数传递时,传递可变对象(mutable)和不可变更对象(immutable)的误区
- python函数--默认参数指向不可变对象
- python函数参数是值传递还是引用传递(以及变量间复制后是否保持一致):取决于对象内容可变不可变
- python--为什么Python有相同的不可变对象id不同?
- Python 函数默认参数不能使用可变对象,如List,dict
- Python陷阱:为什么不能用可变对象作为函数的默认参数值
- python的默认参数和可变对象研究
- python核心编程-默认函数对象参数
- python函数参数是值传递还是引用传递:取决于对象内容可变不可变
- python-在定义函数时,不定长参数中,默认值参数不能放在必选参数前面
- ubuntu安装python3.7,并更新python默认指向为python3.7
- python学习第四节:set、dict和不可变对象
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
- 重点:python类、对象、数据分析、函数参数传递的理解(一)