我今天对以下代码感到惊讶:
testcases = [([1, 1, 1], 2, 2)]
for a, b, c in testcases:
print(a, b, c)
它打印:
[1, 1, 1] 2 2
我预计会出现错误,并认为我们需要第二个循环来获取元组的元素。enyone能向我解释一下它是如何工作的吗?我不知道a
、b
和c
是如何分配的。我使用了Python 3.6。干杯
让我们看看您有什么:
testcases = [([1, 1, 1], 2, 2)]
这是一个列表。一号的。所以testcases[0]
是唯一存在的元素
所以这个代码:
for a, b, c in testcases:
pass
是一个长度为1的循环。因此,每次通过循环(这只是一次(,您都会得到元素:([1, 1, 1], 2, 2)
,它是tuple
。三号的。
所以拆包:a,b,c = testcases[0]
给出:
a == [1, 1, 1]
b == 2
c == 2
这就是你看到的印刷品。
在元组的拆包过程中,左侧的变量总数应等于给定元组中的值总数。Python提供了为任意长度的元组解包传递可选参数(*参数(的语法。所有值将按照其规范的顺序分配给每个变量,所有剩余值将分配给*参数。例如,
>>> tup = ("Elem1", "Elem2","Elem3","Elem4","Unpacking a tuple")
>>> (unp1,*unp2, unp3) = tup
>>> print(*unp2)
Elem2 Elem3 Elem4
>>> print(unp1)
Elem1
>>> print(unp3)
Unpacking a tuple
>>> print(type(unp1),type(unp3))
<class 'str'> <class 'str'>
>>> print(type(unp2))
<class 'list'>
在较低级别上,我们正在创建一个由5个元素组成的元组,然后在该元组上循环,并从循环中获得五个项目中的每一个,并将它们按顺序分配给左手边的三个变量。希望这能有所帮助。