不创建实例作为默认值:
def foo(v1=None):
if v1 is None:
v1 = Foo()
创建实例作为默认值:
def foo(v2=Foo()):
哪种方式在python风格中是首选?
答案 0 :(得分:2)
如果您希望每次调用该函数时都创建一个新实例,则可以这样做:
def foo(v1=None):
if v1 is None:
v1 = Foo()
这是行不通的:
def foo(v2=Foo()):
pass
为什么?因为默认参数值每个模块加载仅评估一次,通常在程序启动时发生。加载包含此代码的模块后,将不再对默认参数进行求值。