在理解 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()
表示长度为1
。 why and how?
但是当我在上面的代码中传递 2 个参数时,同样的工作方式并没有不同。输出为 tuple
和 tuple 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)
括号是 强制性 的唯一例外是空元组 ()
.
我需要一个需要 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()
表示长度为1
。 why and how?
但是当我在上面的代码中传递 2 个参数时,同样的工作方式并没有不同。输出为 tuple
和 tuple 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)
括号是 强制性 的唯一例外是空元组 ()
.