Confusão na compreensão de tupla e * args em Python
Eu preciso de uma função que levariavariadic arguments
. O número de argumentos pode variar de 1 a N.
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)
A saída do programa acima é;
ABC
('H', 'e', 'l', 'l', 'o', '1', '2', '3')
8
ABC1
('Hello123',)
1
------------
ABC
('Hello123', 'Hello1234')
2
ABC1
(('Hello123', 'Hello1234'),)
1
------------
Se eu olhar para esta saída, quando estou passando apenas 1 argumento emabc1()
, o comprimento da tupla se torna8
(guardando*tup
), onde, como noabc1()
mostra o comprimento é1
. why and how?
Mas o mesmo não está funcionando de maneira diferente quando estou passando 2 argumentos no código acima. A saída vem comotuple
etuple of tuple
. Como resolver esse problema, porque eu tenho que escrever o código que funcionará para todos os N