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
假设我有函数:
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