小能豆

强制关键字参数

py

Python 标准库中的某些函数具有(可选)关键字参数,但以关键字参数的形式使用它们是可选的,例如

enumerate(iterable, start=1)    # as keyword argument

enumerate(iterabele, 1)         # as positional argument

都是正确的

但其他人明确禁止使用他们的可选关键字参数作为位置,例如sorted()

py sorted(iterable, *, key=None, reverse=False) Return a new sorted list from the items in iterable. Has two optional arguments which must be specified as keyword arguments.

(另请参阅PEP 3102 - 仅关键字参数。)

为什么只对几个关键字参数做出这样的决定?这样(不正确)使用会有什么不好:

sorted(strings_list, len, True)        # Incorrect, but why not allowed?

阅读 24

收藏
2024-12-25

共1个答案

小能豆

当然,我们只能推测。sorted在 Python 2.x 中,参数的类型有所不同。因此,Python 3.x 版本很可能强制您对新参数使用关键字参数,以避免意外传递 Python 2 代码,而该代码在 Python 3 中执行的操作完全不同,并且不会给您任何警告。

另一方面,这是例外,而不是规则。enumerate您给出的示例没有什么特别之处,它遵循标准的 Python 规则。

2024-12-25