python坑:可变对象作为函数默认值
来源:互联网 发布:pycharm和python 编辑:程序博客网 时间:2024/06/01 10:11
别说话,看代码:
>>> def aa(v, l=[]):... l.append(v)... print(id(l))... return l... >>> >>> >>> aa("h")4352204880['h']>>> >>> aa("k")4352204880['h', 'k'] # 这不是我想要的结果>>> >>> aa("y")4352204880['h', 'k', 'y'] # 这不是我想要的结果
那么为什么会出现这样的结果呢?因为代码在运行前需要先去编译,然后会给这个方法静态分配存储空间,当然也会给参数分配存储空间,也可以从打印参数“l”的存储空间的id是不变的看的出来。所以,字典,集合,列表等等对象是不适合作为函数默认值的。
我瞬间回忆,以前写过好多这样的代码,但是好像都没有出问题啊!!!有么有这样的同感~~~ 祈祷我大部分都是传值了把,啊哈哈哈。
相同的例子:
>>> import time>>> def ss(t=time.time()):... print(id(t))... >>> def ss(t=time.time()):... print(id(t))... print(t)... >>> ss()1405442190767121500430646.18>>> >>> ss()1405442190767121500430646.18 # 时间参数并没有变
阅读全文
0 0
- python坑:可变对象作为函数默认值
- python--可变对象作为默认参数
- Python之函数对象作为参数
- python函数参数默认值
- Python(8)函数之普通参数、参数默认值、可变参数、关键字参数、命名关键字参数及递归函数
- Python入门(三)——函数,参数,参数默认值,可变参数,关键字参数,组合参数,递归函数
- Python函数-可变参数
- Python中函数默认值问题
- 作为对象的函数
- 对象作为函数参数
- 对象作为函数参数
- python学习之路——函数关于可变对象和不可变对象问题
- Python函数的可变参数
- python中的函数可变参数
- python 可变对象与不可变对象
- python可变对象和不可变对象
- python可变对象与不可变对象
- (python)可变对象/不可变对象
- Listview+适配器
- 矩阵不可逆的充分必要条件
- ListView两级联动
- MVC框架
- View和ViewGroup的概念
- python坑:可变对象作为函数默认值
- 机器学习基石 3.3 Learning with Different Protocol
- Maven pom.xml配置详解
- 将ubuntu16.04中pyhton默认版本从2.7换为3.5
- slf4j log4j logback关系详解和相关用法
- java备份数据库四种方法(mysql,mssql数据库备份)
- LeetCode 二分查找第K大的数215. Kth Largest Element in an Array
- linux下编译C++程序
- SIP穿越NAT的rport机制