Py学习  »  Python

在每个python数学模块函数中找到/的含义是什么?[复制品]

Carl_M • 4 年前 • 900 次点击  

什么是 / python 3.4中的平均值 help 输出为 range 在右括号之前?

>>> help(range)
Help on class range in module builtins:

class range(object)
 |  range(stop) -> range object
 |  range(start, stop[, step]) -> range object
 |  
 |  Return a virtual sequence of numbers from start to stop by step.
 |  
 |  Methods defined here:
 |  
 |  __contains__(self, key, /)
 |      Return key in self.
 |  
 |  __eq__(self, value, /)
 |      Return self==value.

                                        ...
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43843
 
900 次点击  
文章 [ 2 ]  |  最新文章 4 年前
prosti
Reply   •   1 楼
prosti    5 年前

我自己也问过这个问题。:)发现 / 最初是由Guido提出的 here .

备选方案:使用“/”怎么样?正好相反 “*”表示“关键字参数”,而“/”不是新字符。

那么他的建议 won .

呵呵。如果这是真的,我的“/”建议会赢:

 def foo(pos_only, /, pos_or_kw, *, kw_only): ...

我认为与此相关的文件是 PEP 570 . 这里的总结部分看起来不错。

扼要重述

用例将决定在函数定义中使用哪些参数:

 def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):

作为指导:

仅当名称无关紧要或没有意义,并且只有少数参数将始终按相同顺序传递时,才使用位置。 仅当名称有意义且函数定义更易于理解时才使用关键字。


如果函数以 /

def foo(p1, p2, /)

这意味着所有函数参数都是位置参数。

Martijn Pieters
Reply   •   2 楼
Martijn Pieters    5 年前

它意味着 positional only parameters ,参数 不能 用作关键字参数。这样的参数只能在C API中指定。

这意味着 key 论证 __contains__ 只能通过位置传递( range(5).__contains__(3) ),而不是作为关键字参数( range(5).__contains__(key=3) ),一些你 可以 在纯python函数中使用位置参数。

也看到 Argument Clinic 文档:

若要在参数诊所中将所有参数标记为仅位置参数,请添加 / 在最后一个参数之后的一行上,缩进与参数行相同的行。

以及 Python FAQ :

函数的参数列表中的斜线表示其前面的参数仅为位置参数。仅位置参数是没有外部可用名称的参数。调用只接受位置参数的函数时,参数将仅基于其位置映射到参数。

还为将来可能包含在python中定义了语法,请参见 PEP 457 - Syntax For Positional-Only Parameters .

这股精神最近恢复了,并且 accepted for inclusion in Python . 由于python 3.8仍处于alpha阶段,因此在该版本中或在3.9中它可能成为现实,这取决于速度 the reference implementation 可以敲定。

只有位置的参数可以导致更干净和更清晰的API,使纯的Python实现,否则只有C的模块更一致和更容易维护,并且因为位置参数只需要很少的处理,它们导致更快的Python代码。