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

Python parameter list with single argument

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

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

任何人都可以向我解释 hi(1) 结果中最后一个逗号的含义(即 (1,)

其实行为只是一点点"weird." :-)

你的参数 x 以星号为前缀,这意味着你传递给函数的所有参数将 "rolled up" 成一个元组, 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 只是使用尾随逗号作为约定,仅此而已。