python-3.x - 为什么在 python 中允许 for else

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

>>> for i in []:
...   print(i)
... else:
...   print('here')
...
here

这不应该有 else 没有 if 语法错误吗? else 也每次都运行(如果 for 已经迭代或没有迭代)所以它没有连接。

>>> for i in 1,2,3:
...   print(i)
... else:
...   print('here')
...
1
2
3
here

最佳答案

来自 docs

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

因此,如果您正在执行 for 循环但不知道该元素是否会在循环中找到/是否在循环中返回 true,这将很有用。所以你可以添加一个break语句,如果元素找到/为真就退出循环,或者如果没有找到/为真则执行另一个命令。例如在你的循环中:

for i in []:
  print(i)
else:
 print('here')

输出

here

在这种情况下,在您的 for 循环中找不到 i。但是,您没有在 for 循环之后执行 break 语句。因此,编译器然后转到 else 语句执行那里的行,因为 for 循环没有中断。

在第二个例子中你有:

for i in 1,2,3:
  print(i)
else:
  print('here')

输出

1
2
3
here

for循环没有遇到break语句,所以for循环结束后会接着执行else子句。无论您使用什么:

for i in 1,2,3:
    print(i)
    break
 else:
    print('here')

输出:

1

https://stackoverflow.com/questions/54714955/

相关文章:

r - 计算 R 中非零值之间出现零的次数

react-native - undefined 不是一个对象(评估'_reactNative.Te

c# - 调用多个相互依赖的异步方法

php - 如何仅在 Laravel 中出现日期时才验证日期

oracle - 使用sqlplus命令行隐藏明文密码

haskell - OverloadedStrings 语言扩展如何工作?

kubernetes - 定时任务 : unknown field "configMapRef"

sql-server - TRY_PARSE 但更快

reactjs - 为什么我的 GlobalStyles 在使用样式化组件部署后不起作用?

google-apps-script - 调试由发布请求触发的 Google Apps 脚本?