当以字典或列表为参数时,pycharm会给出以上提示,大概意思就是默认参数是列表或者字典,这个默认参数仅在初始化的时候被实现一次,而且仅此一次,如果后面的函数调用改变了这个默认参数,可能会影响到以后的这个参数。
什么意思?来看个例子:
def test(arr=[]):
arr.append('哈哈')
print(id(arr), arr)
test()
test()
test(arr=['嘿嘿'])
#2689678556552 ['哈哈']
#2689678556552 ['哈哈', '哈哈']
#2689678441160 ['嘿嘿', '哈哈']
arr这个默认参数本来是一个空数组,前两次都是默认调用实现,因此arr的地址都是一个,直接append就好,但是后面的调用改变了默认参数,变成了自己实现的,这样的话默认参数就会改变,因此地址也变了。
如何让每次的调用都互不影响呢?可以参考下面:
def test(arr=None):
if arr is None:
arr = list()
arr.append('哈哈')
print(id(arr), arr)
test()
test()
test(arr=['嘿嘿'])
#2120871818120 ['哈哈']
#2120871821064 ['哈哈']
#2120871821064 ['嘿嘿', '哈哈']