Python使用星号解包字典键到变量仅加逗号才生效的原因是什么?
语法规则差异
Python 3.0新增的扩展可迭代解包语法,明确要求带星号修饰的赋值目标不能单独存在,必须被包裹在列表或者元组结构中,这就是第一个代码报错的核心原因。
两种写法的具体区别
*d = test_2:星号修饰的变量d是唯一的赋值目标,没有包裹在列表/元组结构里,完全不符合语法约束,因此直接抛出SyntaxError: starred assignment target must be in a list or tuple错误。*d, = test_2:变量末尾的逗号表示这是一个元组结构的赋值目标,等价于(*d,) = test_2,完全满足星号解包的语法要求,因此可以正常运行。
字典解包结果说明
对字典直接做迭代解包时,Python默认迭代字典的键集合,因此最终变量d会被赋值为所有键组成的列表['x', 'y', 'z']。
内容的提问来源于stack exchange,提问作者armin
相关产品推荐
相关产品推荐

