Python中*运算符解包列表疑问:print输出为何无逗号?
Python中*运算符的解包原理与print输出无逗号的原因
关于print(*["John", 20])输出无逗号的原因
*在这里的作用是可迭代对象解包——把列表["John", 20]拆成两个独立的位置参数,等价于执行print("John", 20)。而Python的print函数默认用空格作为参数之间的分隔符(sep=" "是默认值),所以输出的两个值会用空格隔开,看不到逗号。如果想要输出带逗号的结果,只需要显式指定分隔符:
print(*["John", 20], sep=", ")
执行后就会输出John, 20。
关于str.format(*列表)的原理
str.format()方法本身需要接收多个位置参数来匹配格式字符串里的{0}、{1}这类占位符。用*["John", 20]就是把列表里的元素逐个传递给format方法,完全等价于直接写format("John", 20)。你看到的最终输出里的逗号,是格式字符串"My name is {0}, I am {1} old"里自带的逗号,和参数传递的方式无关——不管是直接传两个参数,还是用*解包列表传参,format都会把参数对应填入占位符,格式字符串里的标点符号会原样保留。
内容的提问来源于stack exchange,提问作者Pobudi
相关产品推荐
相关产品推荐

