关于解包运算符下列表与元组元素打印差异的技术疑问
问题解析:
*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
相关产品推荐
相关产品推荐

