【发布时间】:2011-02-24 16:43:48
【问题描述】:
* 运算符在 Python 中是什么意思,例如在 zip(*x) 或 f(**k) 这样的代码中?
- 在解释器内部是如何处理的?
- 它会影响性能吗?是快还是慢?
- 什么时候有用,什么时候没用?
- 应该在函数声明中还是在调用中使用它?
【问题讨论】:
-
我认为这应该被表述为“*函数调用语法”。它们不是运算符,但会让人感到困惑,因为 is 有一个与此语法无关的
*和**运算符。 -
@Ian Bicking:你完全正确,参数列表中的 * 和 ** 是纯语法(令牌)。
-
注意:对于PEP 448: Additional Unpacking Generalizations 特定的东西(例如
[*a, b, *c]或{**d1, **d2}),您需要阅读asterisk in tuple, list and set definitions, double asterisk in dict definition,这是特定于使用outside 函数调用和函数定义。对于较早的PEP 3132,请参阅Multiple Unpacking Assignment in Python when you don't know the sequence length。
标签: python syntax parameter-passing iterable-unpacking argument-unpacking