Python可变位置参数*args输出元组带尾逗号问题咨询
运行代码
def minimum (*n): print(n) minimum(1) minimum(1,2) def func(*args): print(args) values1 = (1,2) values2 = ((1,2), (3,4)) func(values1) func(values2)
输出结果
(1,) (1, 2) ((1, 2),) (((1, 2), (3, 4)),) Process finished with exit code 0
疑问解答
- 问题1:第一个输出
(1,)中1后带有逗号,是否是因为Python预期接收多个参数所以添加了逗号?
解答:不是。这个尾逗号是Python标识单元素元组的专属语法。因为小括号()同时承担运算优先级括号的作用,比如(1)会被识别为整数1,只有加了尾逗号的(1,)才会被判定为元组类型,所以打印单元素元组时Python会自动补尾逗号做区分。 - 问题2:第二个输出
(1, 2)无尾逗号,是否可变位置参数接收的参数会存储为元组?
解答:是的。Python中*开头的可变位置参数,会自动把所有零散传入的参数打包为元组存储。当元组元素数量≥2时,不需要尾逗号就能明确识别为元组,所以打印时不会自动补尾逗号。 - 问题3:后续传入元组作为参数时,输出仍然带有尾逗号的原因是什么?
解答:因为你是将整个元组作为单个参数传入函数,*args会把所有传入的参数打包为元组,此时传入的元组变成了新元组的唯一元素,你打印的本质还是单元素元组,所以会带尾逗号。
如果你想把元组内的元素拆解为独立参数传入,可以在传参时加*做解包,比如调用func(*values1),此时输出为(1, 2),不会出现尾逗号。
内容的提问来源于stack exchange,提问作者redpy
相关产品推荐
相关产品推荐

