在理解 Python 中的元组和 *args 时感到困惑

Confusion in understanding tuple and *args in Python

我需要一个需要 variadic arguments 的函数。参数的数量可能从 1 到 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)

以上程序的输出是;

ABC
('H', 'e', 'l', 'l', 'o', '1', '2', '3')
8
ABC1
('Hello123',)
1
------------
ABC
('Hello123', 'Hello1234')
2
ABC1
(('Hello123', 'Hello1234'),)
1
------------

如果我查看此输出,当我在 abc1() 中仅传递 1 个参数时,元组的长度变为 8(保持 *tup),其中 abc1()表示长度为1why and how? 但是当我在上面的代码中传递 2 个参数时,同样的工作方式并没有不同。输出为 tupletuple of tuple。 如何解决这个问题,因为我必须编写适用于所有 N

的代码

圆括号不组成元组,逗号组成元组。要构建单元素元组,正确的语法是

tup = ("Hello123",)  # parentheses are optional but help readability

相当于

tup = "Hello123",

记住你可以写

x, y = y, x  # swaps x and y using tuple packing/unpacking

一样好
(x, y) = (y, x)

括号是 强制性 的唯一例外是空元组 ().