Список параметров Python с одним аргументом
При тестировании списка параметров Python с одним аргументом я обнаружил странное поведение print
,
>>> def hi(*x):
... print(x)
...
>>> hi()
()
>>> hi(1,2)
(1, 2)
>>> hi(1)
(1,)
Может ли кто-нибудь объяснить мне, что означает последняя запятая в hi(1)
результат (то есть (1,)
)
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 просто использует запятую в качестве соглашения, вот и все.