添加关键字参数:
def bar(self, value=2):
self.a = value
如果没有明确给出,这里value
默认为:2
>>> foo = Foo()
>>> foo.bar()
>>> foo.a
2
>>> foo.bar(5)
>>> foo.a
5
请注意,函数签名创建一次;默认值存储在函数对象上。一个常见的错误是假设每次调用函数时都会评估默认值,这可能会导致一些意外:
import datetime
def ham(now=datetime.datetime.now()):
print now
这里now
将固定到bar
导入和 Python 创建函数对象的那一刻:
>>> ham()
2013-10-24 10:20:26.024775
>>> # wait some time
...
>>> ham()
2013-10-24 10:20:26.024775
当默认值是可变的时,它变得更加令人惊讶:
def eggs(param, value=[]):
value.append(param)
print value
重复调用eggs(2)
将导致value
列表增长,2
每次调用时都会在列表中添加一个新值:
>>> eggs(2)
[2]
>>> eggs(2)
[2, 2]
>>> eggs(2)
[2, 2, 2]
有关此问题的详细讨论,请参阅“Least Astonishment”和 Mutable Default Argument。