理解Python中元组和*args时的困惑
我需要一个函数,它将采用理解Python中元组和*args时的困惑,python,tuples,args,Python,Tuples,Args,我需要一个函数,它将采用可变参数。参数的数量可能从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
可变参数
。参数的数量可能从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
<代码>原因和方式?
但是,当我在上面的代码中传递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)
括号是必需的唯一例外是空元组
()
tup=(“Hello123”)
不创建元组。这只是带括号的字符串“Hello123”。如果你想要一个只有一个元素的元组,你必须在后面加一个逗号,比如:tup=(“Hello123”)
。这种语法看起来可能有点奇怪,但它是必需的,这样像x=(y/2)
这样的表达式就不会被解释为元组。要添加到最后一句话中,如果逗号可能意味着其他内容,则还需要括号。例如,函数参数和列表项都用逗号分隔,因此要在这些环境中构建元组,您需要括号(例如foo((x,y))
和[(x,y)]
)。