例如,我有一个对数据执行某些操作的函数,并将名称作为可选参数。如果没有提供名称,我想调用另一个参数来创建名称。所以替代方案似乎要么
def do_something(data, name=get_name()):
...
或
def do_something(data, name=None):
if name is None:
name=get_name()
...
第一个似乎对我好,但我错过了什么?
答案 0 :(得分:4)
这不是一回事。
get_name()
在第一种情况的函数定义中进行评估,对第二种情况进行动态评估。
在某些情况下,您无法使用第一种方法,例如在使用方法调用的返回时(self.method()
)
所以坚持第二个版本。我不知道它是否更像pythonic,但至少它是一个很好的配方而且有效。
答案 1 :(得分:0)
我会写:
def do_something(data, func=get_name):
func()
您传递该功能并稍后再调用。这与python中的function-is-an-object-thing是一致的,因此是安全的