Python: 函数的默认值作为函数参数

Python: default value of function as a function argument

假设我有函数:

def myF(a, b):
    return a*b-2*b

假设我希望 b 的默认值为 a-1

如果我写:

def myF(a, b=a-1):
    return a*b-2*b

我收到错误消息:

NameError: name 'a' is not defined

我可以使用下面的代码:

def myF(a, b):
    return a*b-2*b

def myDefaultF(a):
    return myF(a, a-1)

有默认值 myF,但我不喜欢它。

如何避免 myDefaultF 并使 myF 的默认值 a-1 用于 b 而没有错误?

您可以执行以下操作:

def myF(a, b=None):
    if b is None:
        b = a - 1
    return a * b - 2 * b

您可以使用 try-except 子句:

def myF(a, b=None):
  try:
    return a*b-2*b
  except:
    return a*(a-1)-2*(a-1)

如果您需要 b 的值是 a 的函数,但您可能需要更改该函数,您可以将 b 的默认值设置为是一个 lambda 函数,然后检查 b 是否可以在函数块中调用。

def myF(a, b=lambda a: a-1):
    if callable(b):
        b = b(a)
    return a * b - 2 * b

这允许您即时为 b 设置不同的函数。

# pass b as an integer
myF(1, 1)
# returns: -1


# use default function for b
myF(4)
# returns: 6


# set b to be 2*a + 1
myF(3, lambda a: 2*a+1)
# returns: 7