|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def func(ls = []):
ls.append(1)
return ls
>>> a = func()
>>> a
[1]
>>> b = func()
>>> b
[1, 1]
>>> a
[1, 1]
func()这个函数运行出来不就应该是一个【1】的数组么,为啥后面运行一次func()就会多一个1元素进去?还是说里面的局部变量ls在每次使用func()函数的时候都是没有清空的,都是上次使用func()剩下的?
求dalao指导,谢谢~
函数的定义相当于一次类型构造,默认值只在创建函数时解析一次,而函数调用时不会重新执行默认参数的构造。
所以,如果使用了字典,列表这样的可变类型就会出楼主您这样的问题,
就是因为这样所以默认参数为数组的值的引用地址是不变的(可以理解为全局变量但是不妥当)。解决方法:
第一种:让默认参数为None,这样就不是列表这样可变类型了
- def func(ls = None):
- ls = []
- ls.append(1)
- return ls
- a = func()
- print(a)
- b = func()
- print(b)
复制代码第二种:干脆不要默认参数
- def func():
- ls = []
- ls.append(1)
- return ls
- a = func()
- print(a)
- b = func()
- print(b)
复制代码
|
|