Python 3 可以声明只能通过关键字来作为参数的函数:
1 | def safe_division(number, divisor, *, ignore_overflow=False, ingore_zero_division=False): |
参数列表里的 *
号,标志着位置参数结束,之后的参数都只能以关键字形式来指定。
save_division(10, 0, False, True) # error
save_division(10, 0, ignore_zero_division=True) # ok
Python 2 中实现以关键字来指定的参数:
Python 2 并没有明确的语法来定义这种只能以关键字形式指定的参数。不过我们可以在参数列表中使用 **
操作符,并且领函数遇到无效的调用时抛出TypeErrors,这样就可以实现与Python 3 相同的功能了。
为了使Python 2 版本的safe_division函数具备只能以关键字形式来指定的参数,我们可以先令该函数接受 **kwargs
参数,然后用 pop
方法把期望的关键字从 kwargs
字典里取走,如果字典的键里面没有那个关键字,那么 pop
方法的第二个参数就会成为默认值。最后为了防止调用者提供无效参数值,我们需要确认 kwargs
字典里面已经没有关键字参数了。
1 | # Python 2 |
safe_division(1, 0, False, False) # error
safe_division(0, 0, unexpected=True) # error
save_division(10, 0, ignore_zero_division=True) # ok