Python 标准库中的某些函数具有(可选)关键字参数,但以关键字参数的形式使用它们是可选的,例如
enumerate(iterable, start=1) # as keyword argument
和
enumerate(iterabele, 1) # as positional argument
都是正确的。
但其他人明确禁止使用他们的可选关键字参数作为位置,例如sorted():
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?
当然,我们只能推测。sorted在 Python 2.x 中,参数的类型有所不同。因此,Python 3.x 版本很可能强制您对新参数使用关键字参数,以避免意外传递 Python 2 代码,而该代码在 Python 3 中执行的操作完全不同,并且不会给您任何警告。
sorted
另一方面,这是例外,而不是规则。enumerate您给出的示例没有什么特别之处,它遵循标准的 Python 规则。
enumerate