Мне нужна функция, которая принимала бы variadic arguments
. Количество аргументов может варьироваться от 1 до N.Путаница в понимании кортежа и * args в Python
def abc(*args):
print "ABC"
print args
print len(args)
def abc1(*args):
print "ABC1"
print args
print len(args)
print "------------"
tup = ("Hello123")
abc(*tup)
abc1(tup)
tup = ("Hello123", "Hello1234")
abc(*tup)
abc1(tup)
Вывод вышеуказанной программы;
ABC
('H', 'e', 'l', 'l', 'o', '1', '2', '3')
8
ABC1
('Hello123',)
1
------------
ABC
('Hello123', 'Hello1234')
2
ABC1
(('Hello123', 'Hello1234'),)
1
------------
Если я смотрю на этот вывод, когда я передаю только один аргумент в abc1()
, длина кортежа становится 8
(сохраняя *tup
), где, как и в abc1()
он показывает длина 1
. why and how?
Но то же самое не работает по-разному, когда я передаю 2 аргумента в коде выше. Выход поступает как tuple
и tuple of tuple
. Как решить эту проблему, потому что я должен написать код, который будет работать для всех N
'tup = (" Hello123 ")' не создает кортеж. Это только строка «Hello123» с круглыми скобками вокруг нее. Если вы хотите кортеж с одним элементом, вам нужно поставить конечную запятую, например: 'tup = (" Hello123 ",)'. Этот синтаксис может выглядеть немного странным, но он необходим, чтобы выражения типа 'x = (y/2)' не интерпретировались как кортежи. –