You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中星号赋值为何生成列表而非元组?

解答

这是Python不同语法场景对*符号的行为做了不同定义导致的,核心区别如下:

  • 函数参数的*args是Python早期就支持的语法,设计为tuple类型的核心原因是:函数传入的参数默认是不可修改的,不可变的tuple正好符合参数传递的安全预期,避免后续误改参数值引发隐性问题。
  • 你代码里用到的星号赋值属于可迭代对象扩展解包赋值语法,是Python 3.0新增的特性,规范明确要求解包得到的剩余值为list类型。这么设计是因为赋值场景下,开发者拿到剩余值后大多需要做增删改操作,可变的list更符合使用习惯,省去了额外做类型转换的步骤。

如果需要在该场景下拿到tuple类型,手动转换即可:

some_list = [(1, 2, 3), (3, 2, 1)]
for i, *args in some_list:
    args = tuple(args)
    print(args)

运行后就能得到tuple类型的输出:

(2, 3)
(2, 1)

内容的提问来源于stack exchange,提问作者EdiBoba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:15:02