我见过这个问题(这不是重复的):Python bare asterisk in function argument
在python-3.x中,可以向函数参数添加一个空的*
,这意味着(引用自docs):
Parameters after “*” or “*identifier” are keyword-only parameters and may only be passed used keyword arguments.
好的,我定义了一个函数:
>>> def f(a, b, *, c=1, d=2, e=3):
... print('Hello, world!')
...
我只能通过指定关键字来传递c
、d
和e
变量值:
>>> f(1, 2, 10, 20, 30)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 2 positional arguments but 5 were given
>>> f(1, 2, c=10, d=20, e=30)
Hello, world!
问题是:
一些“真实世界”的例子会很有帮助。提前谢谢
PEP 3102非常清楚地解释了基本原理:要点是允许函数接受本质上正交的各种“选项”。在定义端和调用端指定这些位置是很尴尬的,因为它们没有任何明显的“优先级”来转换为位置顺序
在不同的库中,有许多函数可以从中受益。例如,
pandas.read_csv
的调用签名是:除了文件路径外,大多数都是正交选项,用于指定如何解析CSV文件的不同方面。没有特别的理由说明为什么它们会以特定的顺序通过。你会疯狂地跟踪这些的任何位置顺序。将它们作为关键字传递更有意义
现在,您可以看到pandas实际上并没有将它们定义为只包含关键字的参数,大概是为了保持与Python2的兼容性。我可以想象,出于同样的原因,许多库都避免使用语法。我不知道哪些库(如果有的话)已经开始使用它
对于来自或/或使用
ruby
python中的以下表达式
类似于
用红宝石做的
因为python是explicit is better than implicit语言,所以它需要参数中的^{} (splat) 运算符
PS:我从未使用过python,如果我弄错了,请纠正我
相关问题 更多 >
编程相关推荐