有人可以请某人在函数中描述Python可选参数的行为吗?
我的理解是可选参数使用函数定义中的默认值。
以下代码具有正确的行为。
# Function
def testf2(val=0):
val += 5
print(val)
val=0
return
# Testing
testf2()
testf2(10)
testf2()
# Output:
5
15
5
但我不知道为什么带有可选列表的类似代码具有完全不同的行为。即使列表被val = []清除,该函数也会记住一些数据。
# Function
def testf(val=[]):
val.append("OK")
print(val)
val=[]
return
# Testing
testf()
testf(["myString"])
testf()
testf(["mySecondString"])
testf()
# Output:
['OK'] #excpected ['OK']
['myString', 'OK'] #excpected ['myString']
['OK', 'OK'] #excpected ['OK']
['mySecondString', 'OK'] #excpected ['mySecondString']
['OK', 'OK', 'OK'] #excpected ['OK']
非常感谢你的帮助。
答案 0 :(得分:1)
Python的默认参数在定义函数时被计算一次,而不是每次调用函数时。这意味着如果你使用一个可变的默认参数并对其进行变异,那么你将会对该对象进行变异,以便将来调用该函数。