list()函数仅接受1个参数,传入*args对应的参数为何可正常运行?
def foo(*args): return list(args) foo(1,2) # [1,2]
运行正常的原因
- 函数定义中带
*前缀的args是可变位置参数标识,作用是把调用函数时传入的所有零散位置参数打包成 一个独立的元组,赋值给args变量。也就是说不管你给foo传多少个参数,args永远是单个元组对象,不存在多参数传入的情况。 - 调用
foo(1,2)时,两个入参1、2已经被打包为元组(1, 2),此时给list()传入的就是这一个元组参数,完全符合list()只接受0个或1个可迭代对象作为入参的要求。 - 元组属于Python内置的可迭代对象,
list()会遍历元组内的所有元素,生成对应列表,所以最终输出结果为[1, 2],整个调用逻辑完全合法。
内容的提问来源于stack exchange,提问作者kubaSpolsky
相关产品推荐
相关产品推荐

