为什么在 python 3.8 中只使用位置参数?

Gul*_*zar -1 python python-3.x python-3.8 pep570

3.8 中引入了新的“仅位置参数”语法。

来自文档中的仅位置参数

有新语法 ( /) 指示某些函数参数必须按位置指定(即,不能用作关键字参数)。这与help()for 在 C 中实现的函数(由 Larry Hastings 的Argument Clinic工具产生)所示的符号相同。

来自http://northtexasroofing.net/article/10509084.shtml

现在pow(2, 10)pow(2, 10, 17)是有效的调用,但是pow(x=2, y=10)pow(2, 10, z=17)是无效的。


我的问题是,为什么要使用这种语法?

为什么它对代码的用户更好?

在我看来,这让用户更难指定他们的论点的实际含义,如果他们愿意的话。

为什么要让用户更难?

我显然错过了一些东西。

ppp*_*ery 8

简要总结PEP 570 中所述的基本原理,该 PEP 添加了仅位置参数:

  1. 许多用 C 实现的内置函数已经不接受关键字参数,甚至在 Python 3.8 之前。允许仅位置参数允许 python 代码与 C 代码一致
  2. 一些 python 类,例如dict类型的构造函数,采用任意关键字参数。如果您要尝试在 python 中定义具有此类行为的类,则必须编写def __init__(self, **kwds), ... 除非您不能使用名为self!的关键字参数。仅位置参数可以避免这个缺陷。
  3. 一些函数没有任何自然的名称来分配它们的参数。拿int构造函数。int(x="3")不比int("3"). 仅位置参数允许将没有内在含义的名称视为实现细节,而不是模块的公共 API 的一部分。

PEP 中有更多细节,但这三点总结了该功能存在的一般原因。