Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解Python中元组和*args时的困惑_Python_Tuples_Args - Fatal编程技术网

理解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)]
)。