Contents
30.3.7. 使用关键字参数和位置参数设计参数列表¶
例如,计算两数相除的结果时,可能需要仔细考虑各种特殊情况。例如,在除数为0的情况下,是抛出ZeroDivisionError异常,还是返回无穷(infinity);
在结果溢出的情况下,是抛出OverflowError异常,还是返回0。
def safe_division(number, divisor,
ignore_overflow,
ignore_zero_division):
try:
return number / divisor
except OverflowError:
if ignore_overflow:
return 0
else:
raise
except ZeroDivisionError:
if ignore_zero_division:
return float("inf")
else:
raise
result1 = safe_division(1.0, 10 ** 500, True, False)
print(result1)
result2 = safe_division(1.0, 0, False, True)
print(result2)
要想让代码看起来更清晰,一种办法是给这两个参数都指定默认值。按照默认值,该函数只要遇到特殊情况,就会抛出异常。
def safe_division(number, divisor,
ignore_overflow=False,
ignore_zero_division=False):
......
result1 = safe_division(1.0, 10 ** 500, ignore_overflow=True)
print(result1)
result2 = safe_division(1.0, 0, ignore_zero_division=True)
print(result2)
要点:
Keyword-only argument是一种只能通过关键字指定而不能通过位置指定的参数。这迫使调用者必须指明,这个值是传给哪一个参数的。
在函数的参数列表中,这种参数位于符号的右侧。Positional-only argument是这样一种参数,它不允许调用者通过关键字来指定,而是要求必须按位置传递。这可以降低调用代码与参数名称之间的耦合程度。
在函数的参数列表中,这些参数位于/符号的左侧。在参数列表中,位于/与之间的参数,可以按位置指定,也可以用关键字来指定。这也是Python普通参数的默认指定方式。