您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

赋值语句左侧和右侧的星号*运算符

赋值语句左侧和右侧的星号*运算符

当还考虑了扩展包装的初始PEP时,将解释这两种情况之间的区别:PEP 3132 -- Extended iterable unpacking

在该PEP的摘要中,我们可以看到:

该PEP提议对可迭代的解包语法进行更改,从而允许指定“全包”名称,该名称 所有未分配给“常规”名称的项目 。

(强调我的)

,执行后:

*elements, = iterable

elements总是将list包含内所有项目的iterable

即使在两种情况下看起来都相似,*在这种情况下(左侧)也意味着:捕获未分配给名称的所有内容并将其分配给加星号的表达式。它的工作原理类似的方式作为*args**kwargs在做的 。

def spam(*args, **kwargs): 
    """ args and kwargs group positional and keywords respectively """

在这里,我们没有*像通常在 那样以“全部捕获”方式进行工作。它扩展了附加的可迭代对象的内容。因此,该语句:

elements = *iterable,

可以视为:

elements = 1, 2, 3, 4,

这是atuple初始化的另一种方式。

请注意,list可以通过简单使用创建一个elements = [*iterable],它将解压缩iterablein的内容[]并导致对form的赋值elements = [1, 2, 3, 4]

其他 2022/1/1 18:36:56 有432人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶