为什么在Python中允许其他

Pet*_*ore 1 python-2.7 python-3.x

我不明白为什么在python中允许这样做?

>>> for i in []:
...   print(i)
... else:
...   print('here')
...
here
Run Code Online (Sandbox Code Playgroud)

如果没有语法错误,应该没有其他吗?else每次也会运行(如果for进行了迭代),因此未连接。

>>> for i in 1,2,3:
...   print(i)
... else:
...   print('here')
...
1
2
3
here
Run Code Online (Sandbox Code Playgroud)

Ede*_*koh 5

来自文档

* else子句在循环正常完成后执行。这意味着循环未遇到break语句。*

因此,这在执行for循环但不知道是否在循环中找到元素/在循环中返回true时很有用。因此,如果找到/ true,则可以添加break语句退出循环,如果找不到/ true,则可以执行另一条命令。例如在您的循环中:

for i in []:
  print(i)
else:
 print('here')
Run Code Online (Sandbox Code Playgroud)

输出量

here
Run Code Online (Sandbox Code Playgroud)

在这种情况下,在您的for循环中找不到我。但是,您没有在for循环之后执行break语句。因此,else由于for循环未中断,因此编译器随后转到该语句以执行该行。

在第二个示例中,您具有:

for i in 1,2,3:
  print(i)
else:
  print('here')
Run Code Online (Sandbox Code Playgroud)

输出量

1
2
3
here
Run Code Online (Sandbox Code Playgroud)

for循环没有遇到break语句,因此在for循环完成后,它将执行else子句。但是您将使用:

for i in 1,2,3:
    print(i)
    break
 else:
    print('here')
Run Code Online (Sandbox Code Playgroud)

输出

1
Run Code Online (Sandbox Code Playgroud)