Python 使用默认参数调用的函数不同于没有参数

Python Function Called with Default Argument Different From No Argument

假设我有一个带有两个参数的函数,xy。如果未给出 y,那么我将创建一个基于 x 的默认值。当然,我不能用 def myfunc(x, y=x+1) 定义函数,因为默认值会在函数的 definition 处求值,而不是在调用时求值。相反,因此,我会用 def myfunc(x, y=None) 定义函数,并在我的函数体中检查 y 是否为 None,如果是,则将 y 重新定义为 x + 1.如果 y 可能是 任何东西 会怎么样?如果 None 也是一个可能的值呢?有没有一种方法可以区分 myfunc(4)myfunc(4, None),即使 y 的默认值是 None

如果你真的需要知道它没有设置,这是方法:

NOT_SET = object()
def f(x, y=NOT_SET):
    if y is NOT_SET:
        # y is not set

之所以有效,是因为:

>>> a = object()
>>> b = object()
>>> a is b
False