带有单个参数的Python参数列表

时间:2016-11-20 22:33:37

标签: python parameter-passing variadic-functions positional-parameter

使用单个参数测试Python参数列表时,我发现print有一些奇怪的行为。

>>> def hi(*x):
...     print(x)
...
>>> hi()
()
>>> hi(1,2)
(1, 2)
>>> hi(1)
(1,)

任何人都可以向我解释hi(1)的结果中最后一个逗号的含义(即(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只使用尾随逗号作为约定,这就是全部。