具有
# example.py
def foo(arg=bar()):
pass
即使使用bar
,也会执行from example import foo
。
我记得很久以前我看过类似的东西:
# example.py
def foo(arg=lambda: bar()):
pass
但我不确定它是不是最好的方式,现在,当我遇到这种情况时,我无法找到有关如何处理此行为的任何信息。
在python中将函数调用作为默认函数参数的正确方法是什么?
答案 0 :(得分:9)
这是最恐怖的方式:
def foo(arg=None):
if arg is None:
arg = bar()
...
如果您希望函数bar
只被调用一次,并且您不希望在导入时调用它,那么您将必须在某处维护该状态。也许是在一个可调用的类中:
class Foo:
def __init__(self):
self.default_arg = None
def __call__(self, arg=None):
if arg is None:
if self.default_arg is None:
self.default_arg = bar()
arg = self.default_arg
...
foo = Foo()