默认变量 。因此,Python会创建 的副本 从那时起,它始终将引用作为默认值传递。无需重新评估。
但是,您可以通过将 用作默认对象来解决此问题,然后使用一条if
语句相应地替换它。就像是:
**the_default = object()**
x = 1
def foo(a = **the_default** ):
if a **is** the_default:
a = x
print a
x = 2
foo()
注意,我们is
用来执行 引用相等 。因此,我们检查它是否确实是default_object
。您不应the_default
在代码的其他地方使用该对象。
在许多Python代码中,它们None
用作默认值(从而减少了构造对象的数量)。例如:
def foo(a = **None** ):
if a **is** None:
a = x
print a
但是请注意,如果执行此操作,则程序无法区分用户调用foo()
和用户调用,foo(None)
而使用则the_object
使用户更难获得对该对象的引用。如果None
也将是一个有效的候选者,这将很有用:如果您不想foo(None)
打印'None'
,则不要x
。