Python help()输出中的斜杠是什么意思?
在Python3.4的Python help()输出中的斜杠是什么意思?,python,python-3.x,parameters,introspection,Python,Python 3.x,Parameters,Introspection,在Python3.4的帮助中,在结束括号之前的范围的输出中,/是什么意思 >>> 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 numb
帮助
中,在结束括号之前的范围
的输出中,/
是什么意思
>>> 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.
...
它表示参数的结束,您不能将其用作关键字参数。在Python3.8之前,此类参数只能在C API中指定 这意味着
的key
参数只能通过位置(范围(5).\uu包含\uuu3)
)传递,而不能作为关键字参数(范围(5).\uu包含\uuu3)
),这是纯python函数中可以使用位置参数的
另请参见文档:
要在参数诊所中将所有参数标记为仅位置参数,请在最后一个参数后的一行上添加一个与参数行缩进相同的/
以及(最近添加的)以下内容:
函数参数列表中的斜杠表示其前面的参数仅为位置参数。仅位置参数是没有外部可用名称的参数。在调用只接受位置参数的函数时,参数仅根据其位置映射到参数
语法现在是Python语言规范的一部分,请参阅。在PEP 570之前,该语法已经保留下来,以便将来可能包含在Python中,请参阅
仅位置参数可以带来更干净、更清晰的API,使纯Python的纯C模块实现更一致、更易于维护,而且因为仅位置参数只需要很少的处理,所以它们可以带来更快的Python代码。我自己问过这个问题。:)发现/
最初是由Guido在年提出的
备选方案:使用“/”怎么样?有点相反
“*”表示“关键字参数”,而“/”不是新字符
然后是他的提议
呵呵。如果这是真的,我的“/”提案将获胜:
def foo(pos_only, /, pos_or_kw, *, kw_only): ...
我认为涉及这一点的非常相关的文件是。
重述部分看起来不错
重述
用例将决定在函数定义中使用哪些参数:
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
作为指导:
仅当名称无关紧要或没有意义,并且只有几个参数始终按相同顺序传递时,才使用位置参数。
仅当名称有意义且函数定义更易于理解时才使用关键字
如果函数以/
def foo(p1, p2, /)
这意味着所有函数参数都是位置参数 正斜杠(/)表示它前面的所有参数都是位置参数。Python3.8接受后添加了仅位置参数特性。最初,该符号是在中定义的
函数定义中斜杠(/)前面的参数仅为位置参数,斜杠(/)后面的参数可以是任何类型的参数。其中,参数仅根据调用函数时的位置映射到位置参数。按关键字(名称)传递仅位置参数无效
让我们举下面的例子
def foo(a, b, / , x, y):
print("positional ", a, b)
print("positional or keyword", x, y)
在上述函数定义中,参数a和b仅为位置参数,而x或y可以是位置参数或关键字参数
以下函数调用是有效的
foo(40, 20, 99, 39)
foo(40, 3.14, "hello", y="world")
foo(1.45, 3.14, x="hello", y="world")
但是,以下函数调用无效,这会引发异常TypeError,因为a、b不是作为位置参数传递的,而是作为关键字传递的
foo(a=1.45, b=3.14, x=1, y=4)
TypeError:foo()获取了一些仅作为关键字传递的位置参数
论点:“a,b”
python中的许多内置函数只接受位置参数,而按关键字传递参数是没有意义的。例如,内置函数len只接受一个位置(only)参数,如果将len调用为len(obj=“hello world”)会损害可读性,请检查帮助(len)
仅位置参数使底层c/库函数易于维护。它允许在将来更改仅位置参数的参数名称,而不会破坏使用API的客户端代码
最后但并非最不重要的一点是,仅位置参数允许我们在可变长度关键字参数中使用它们的名称。检查下面的示例
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}
此处更好地解释了仅位置参数
python3.8正式添加了仅位置参数语法。结帐
PEP相关:选择/
标记,因为“这是*
的反向操作”表明Python有点疯狂。这是一种联觉。
>>> def f(a, b, /, **kwargs):
... print(a, b, kwargs)
...
>>> f(10, 20, a=1, b=2, c=3) # a and b are used in two ways
10 20 {'a': 1, 'b': 2, 'c': 3}