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

关于解包运算符下列表与元组元素打印差异的技术疑问

问题解析:*args的打包与解包逻辑

你搞混了*args的作用时机——它是把调用时传入的多个位置参数打包成元组,而不是自动解包你传入的单个可迭代对象。

先看func1的执行逻辑

def func1(*args):
    print(type(args))
    print('Func1')
    for k in args:
        print(k)

func1([1,2,3])

你调用func1时只传了一个参数:整个列表[1,2,3]。*args会把这个唯一的参数打包成一个元组([1,2,3],)(注意元组末尾的逗号)。遍历这个元组时,每次取到的是完整的列表对象,所以直接打印出[1, 2, 3]。

再看func2的执行逻辑

def func2(args):
    print(type(args))
    print('Func2')
    for k in args:
        print(k)

func2([1,2,3])

这里你直接把列表[1,2,3]传给了参数args,遍历args就是遍历列表内部的每个元素,所以会逐个输出1、2、3。

如何让func1实现你预期的效果?

如果想让func1解包列表里的元素,需要在调用时用*运算符把列表拆成多个位置参数:

func1(*[1,2,3])

此时*args会把拆出来的1、2、3打包成元组(1,2,3),遍历的时候就会逐个打印:

<class 'tuple'>
Func1
1
2
3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:39:58