按关键字传参很灵活,可以把函数的用法表达得更明确。
例如,计算两数相除,有两种特殊情况。有时我们想忽略ZeroDivisionError异常并返回无穷。有时想忽略OverflowError异常返回0。
def sate_division(a, b, ignore_overflow=False, ignore_zero_division=False):
try:
return a/b
except OveflowError:
if ignore_overflow:
return 0
else:
raise
except ZeroDivisionError:
if ignore_zero_division:
return float('inf')
else:
raise
缺陷是关键字参数依然可以通过位置参数的形式调用。
safe_division(1, 2, True, False)
对于复杂函数来说,最好保证调用者清晰地调用代码。可以定义一种只能以关键字形式来指定的参数。
def sate_division(a, b, *, ignore_overflow=False, ignore_zero_division=False):
*号表示位置参数就此终结。
要点
关键字参数能使函数调用的意图更明确
对于各参数之间容易混淆的函数,可以声明只能以关键字形式指定的参数。对于接受多个boolean标志的函数,更应该这样做