-1

在使用单个参数测试 Python 参数列表时,我发现print.

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

谁能向我解释一下hi(1)结果中的最后一个逗号是什么意思(即(1,)

4

1 回答 1

2

实际上这种行为只是有点“奇怪”。:-)

您的参数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,所有后续参数都被打包到 tupley中。您可能只是发现 Python 表示具有 0 或 1 个组件的元组的方式有点奇怪,但是当您意识到它(1)必须是一个数字并且必须有某种方法来表示单元素元组时,它就很有意义了。Python 只是使用尾随逗号作为约定,仅此而已。

于 2016-11-20T22:36:19.180 回答