这段代码发生了什么?

tem*_*ame 7 python python-3.x

x,y,z = [1,2,3], [4,5,6], [7,8,9]
for a,b,c in x,y,z:
    print(a,b,c)
Run Code Online (Sandbox Code Playgroud)

输出是:

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

我无法在心理上导航这里发生的任何逻辑来产生这个输出.我知道zip函数使这段代码以我明确想要的方式运行; 但我只是试图理解为什么它不使用zip函数时这样工作.

这是一个有意识的功能,一个功能,你可以通过这种方式连续迭代多个列表?有点?

Tim*_*ers 8

你已经有了很好的答案,但我认为考虑这种等效的变化将有助于使它更清晰:

x,y,z = [1,2,3], [4,5,6], [7,8,9]
for t in x,y,z:
    a, b, c = t
    print(a,b,c)
Run Code Online (Sandbox Code Playgroud)

你不会感到惊讶的是t连续绑定x,y并且z,对不对?在您的原始代码中发生了完全相同的事情,除了:

a, b, c = t
Run Code Online (Sandbox Code Playgroud)

部分不那么明显.

  • 永远,在我选择探索的任何知识领域.我会永远记得今晚这一切都转向了我. (2认同)

Bi *_*ico 6

噢,这是一团糟.这太过于使用了python的可迭代解包.该声明a, b, c = iterable只是分配的元素iterable的变量a,bc.在这种情况下iterable必须有3个元素.

首先你有:

x,y,z = [1,2,3], [4,5,6], [7,8,9]
# Which is:
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
Run Code Online (Sandbox Code Playgroud)

那么你有:

for a, b, c in x, y, z:
    print(a, b, c)
# Which is:
temp = (x, y, z)
for item in temp:
    a = item[0]
    b = item[1]
    c = item[2]
    print(a, b, c)
Run Code Online (Sandbox Code Playgroud)

还有一点需要注意的是,声明与之mytuple = 1, 2, 3相同mytuple = (1, 2, 3).