如何使用可选参数自定义Python函数?

时间:2013-10-24 09:03:40

标签: python

这里有很多关于这类问题的讨论,但我没有看到有关如何实现这样一个功能的任何内容。

假设我的课程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

我该怎么做?

2 个答案:

答案 0 :(得分:6)

添加keyword argument

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

希望这有帮助!