这里有很多关于这类问题的讨论,但我没有看到有关如何实现这样一个功能的任何内容。
假设我的课程Foo()
里面有一个函数bar()
。
函数bar()
接受 no或只有一个参数。当它什么都没有时,属性被设置为2.否则,它被设置为输入的任何值。即。
In [32]: foo = Foo()
In [33]: foo.bar()
In [34]: foo.a
Out [34]: 2
和
In [32]: foo = Foo()
In [33]: foo.bar(5)
In [34]: foo.a
Out [34]: 5
我该怎么做?
答案 0 :(得分:6)
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" and the Mutable Default Argument。
答案 1 :(得分:0)
你可以为参数提供默认值。只需将其定义为关键字参数:
def bar(self, param=2):
self.a = param
希望这有帮助!