tranvansang - 5 months ago 28

Python Question

When testing Python parameter list with single argument, I found weird

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

`(1,)`

Thanks in advanced

Answer

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.