1

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

从文档中的仅位置参数

有新的语法 ( /) 表示必须在位置上指定某些函数参数(即,不能用作关键字参数)。help()这与用 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)是无效的。


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

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

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

为什么要让用户更难?

我显然错过了一些东西。

4

1 回答 1

11

为了简要总结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 中还有更多细节,但这三点总结了该功能存在的一般原因。

于 2019-10-21T01:25:00.973 回答