有
# example.py
def foo(arg=bar()):
pass
Run Code Online (Sandbox Code Playgroud)
bar甚至会执行from example import foo.
我记得很久以前我看过类似的东西:
# example.py
def foo(arg=lambda: bar()):
pass
Run Code Online (Sandbox Code Playgroud)
但我不确定这是不是最好的方式,现在,当我遇到这种情况时,我找不到任何关于如何处理这种行为的信息.
在python中将函数调用作为默认函数参数的正确方法是什么?
这是最恐怖的方式:
def foo(arg=None):
if arg is None:
arg = bar()
...
Run Code Online (Sandbox Code Playgroud)
如果您希望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()
Run Code Online (Sandbox Code Playgroud)