Python parameter list with single argument

白昼怎懂夜的黑 提交于 2019-12-14 03:25:56

问题


When testing Python parameter list with a single argument, I found some weird behavior with print.

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

Could any one explain to me what the last comma mean in hi(1)'s result (i.e. (1,))


回答1:


Actually the behavior is only a little bit "weird." :-)

Your parameter x is prefixed with a star, which means all the arguments you pass to the function will be "rolled up" into a single tuple, and x will be that tuple.

The value (1,) is the way Python writes a tuple of one value, to contrast it with (1), which would be the number 1.

Here is a more general case:

def f(x, *y):
    return "x is {} and y is {}".format(x, y)

Here are some runs:

>>> 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)'

Notice how the first argument goes to x and all subsequent arguments are packed into the tuple y. You might just have found the way Python represents tuples with 0 or 1 components a little weird, but it makes sense when you realize that (1) has to be a number and so there has to be some way to represent a single-element tuple. Python just uses the trailing comma as a convention, that's all.



来源:https://stackoverflow.com/questions/40710220/python-parameter-list-with-single-argument

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!