函数调用之外的星号

时间:2013-06-11 13:49:23

标签: python python-3.x

我冒险进入python,我对星号有疑问。我知道它们用于函数调用中的参数,但是我看到了在函数卡之外使用它们的代码片段(例如,在5个等级的元组中,将它们解压缩到变量中,如:

first, *middle, last = grades

每当我尝试在函数调用的参数中使用此上下文/上下文中的星号时,我在解释器中会得到无效的语法。我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:11)

Python 3添加了扩展元组解包,支持一个通配符,请参阅PEP 3132

*start, tail = ...
head, *middle, tail =  ...

请参阅assignment statements参考文档:

  

如果目标列表包含一个前缀为星号的目标,称为“已加星标”的目标:该对象必须是一个序列,其中至少与目标列表中的目标一样多,减去一个。序列的第一项从左到右分配给加星标的目标之前的目标。序列的最终项目将在已加星标的目标之后分配给目标。然后将序列中剩余项目的列表分配给已加星标的目标(列表可以为空)。

在赋值的左手边(目标列表)中使用星号是Python 2中的语法错误。