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

时间:2019-10-20 22:23:51

标签: python python-3.8

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

来自文档中的Positional-only parameters

  

有新的语法(/)表示某些函数参数必须   位置指定(即,不能用作关键字参数)。   对于实现的功能,此符号与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)无效。


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

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

在我看来,如果用户愿意,这将使用户更难指定其参数的实际含义。

为什么要加重用户负担?

我显然错过了一些东西。

1 个答案:

答案 0 :(得分:0)

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

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

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