将另一个函数作为可选参数调用是ok / pythonic吗?

时间:2017-02-27 15:05:36

标签: python

例如,我有一个对数据执行某些操作的函数,并将名称作为可选参数。如果没有提供名称,我想调用另一个参数来创建名称。所以替代方案似乎要么

def do_something(data, name=get_name()):
    ...

def do_something(data, name=None):
    if name is None: 
        name=get_name()
    ...

第一个似乎对我好,但我错过了什么?

2 个答案:

答案 0 :(得分:4)

这不是一回事。

get_name()在第一种情况的函数定义中进行评估,对第二种情况进行动态评估。

在某些情况下,您无法使用第一种方法,例如在使用方法调用的返回时(self.method()

所以坚持第二个版本。我不知道它是否更像pythonic,但至少它是一个很好的配方而且有效。

答案 1 :(得分:0)

我会写:

def do_something(data, func=get_name):
    func()

您传递该功能并稍后再调用。这与python中的function-is-an-object-thing是一致的,因此是安全的