0

我以为我已经学习了 python,并且参数/参数(这是正确的术语?)只是方法中的局部变量,如果它们没有在方法调用中声明,那么它们将采用它们定义的默认值。这个例子清楚地表明我错了:

这段代码

def example(foo=[]):
    print foo
    bar = 'Hello world'
    foo.append(bar)
    return foo

print example()
print example()

打印出这个

[]
['Hello world']
['Hello world']
['Hello world', 'Hello world']

我原以为它会打印出来:

[]
['Hello world']
[]
['Hello world']

为什么不会发生_


我知道

print example([])
print example([])

打印出我的期望。但这有点错过了拥有默认值的意义..

奖励信息:使用 Python 2.7.3 和 IPython

4

1 回答 1

2

参数的默认值仅在每个方法定义时创建一次,而不是在使用时创建,这会导致可变值的麻烦(或至少不是完全直接的行为)。

为了得到你所期望的,你必须在函数内部创建它,比如;

def example(foo=None):
    if foo is None: foo = []
    print foo
    bar = 'Hello world'
    foo.append(bar)
    return foo
于 2013-07-22T07:07:10.177 回答