Python 3.5函数中的可选参数

时间:2016-05-17 06:59:58

标签: python

有人可以请某人在函数中描述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']

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

Python的默认参数在定义函数时被计算一次,而不是每次调用函数时。这意味着如果你使用一个可变的默认参数并对其进行变异,那么你将会对该对象进行变异,以便将来调用该函数。

The Hitchhiker's Guide to Python: Common Gotchas