【发布时间】:2023-03-05 23:15:01
【问题描述】:
我看过这个 SO 问题(这不是重复的):Python bare asterisk in function argument
在 python-3.x 中,您可以在函数参数中添加一个裸露的 *,这意味着(引用自 docs):
“*”或“*identifier”之后的参数是关键字参数,并且 只能传递使用过的关键字参数。
好的,所以,我已经定义了一个函数:
>>> 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!
问题是:
- 这种限制/语法糖的动机是什么?
- 它涵盖了哪些用例?
- 真的用在切换到python3的第三方库中了吗?
一些“现实世界”的例子会有很大帮助。提前致谢。
【问题讨论】:
-
适用于需要命名参数以增强可读性的情况,例如一个窗口:
Window(width = 800, height = 600, fullscreen = true) -
PEP 3102 解释得很清楚。
-
@BrenBarn 谢谢你的链接,它对“动机”部分有很大帮助。真实世界的示例和用例将完成该主题。
-
据我所知,
curio正在其new_tasks函数中使用此功能 -
这里的回复给出了直观的解释:stackoverflow.com/a/39284225/1436851
标签: python function python-3.x arguments keyword-argument