使用单个参数测试Python参数列表时,我发现print
有一些奇怪的行为。
>>> def hi(*x):
... print(x)
...
>>> hi()
()
>>> hi(1,2)
(1, 2)
>>> hi(1)
(1,)
任何人都可以向我解释hi(1)
的结果中最后一个逗号的含义(即(1,)
)
答案 0 :(得分:1)
实际上这种行为只是有点“怪异”。 : - )
您的参数x
以星号为前缀,这意味着您传递给函数的所有参数都将“汇总”为单个元组,而x
将是该元组。
值(1,)
是Python编写一个值的元组的方式,与(1)
形成对比,后者将是数字1。
这是一个更一般的案例:
def f(x, *y):
return "x is {} and y is {}".format(x, y)
以下是一些运行:
>>> f(1)
'x is 1 and y is ()'
>>> f(1, 2)
'x is 1 and y is (2,)'
>>> f(1, 2, 3)
'x is 1 and y is (2, 3)'
>>> f(1, 2, 3, 4)
'x is 1 and y is (2, 3, 4)'
注意第一个参数如何转到x
,所有后续参数都打包到元组y
中。您可能刚刚发现Python代表0或1个组件的元组有点奇怪,但是当您意识到(1)
必须是一个数字时才有意义,因此必须有某种方式来表示单个 - 元素元组。 Python只使用尾随逗号作为约定,这就是全部。