189 8069 5689

Python中怎么使用forelse语句

这篇文章主要介绍“Python中怎么使用for else语句”,在日常操作中,相信很多人在Python中怎么使用for else语句问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python中怎么使用for else语句”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司是一家从事企业网站建设、做网站、网站制作、行业门户网站建设、网页设计制作的专业网站建设公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点上千家。

任何编程语言都提供了 if…else… 语句,表示如果(if)满足条件就做某件事,否则(else)就做另外一件事:

if a==b:
   print("true")

else:
   print("false")

然而,在 Python 中 else 不仅可以和 if 搭配使用,另一种特有的句法是 for…else …,它还可以和 while、try…except 组合使用,例如:

for i in range(3):
   print(i)
else:
   print("end")

>>>
0
1
2
end

但是,你会发现 for…else… 与 if…else… 表现得不一样,按照以往经验来说,执行了 for 语句块的代码就不执行 else 里面了,反之亦然。

然而,我们看到的却恰恰相反,for 循环结束之后接着又执行了 else 语句块,这就有点意思了,if … else … 翻译成大白话就是 如果…否则…,而 for…else… 翻译成白话成了 直到… 然后 …,为什么不把它写成  for…then… 的句式呢?

for 循环遍历空列表也会执行 else 语句块,因为它是正常退出 for 循环的一种特例情况。

for i in []:
    print(i)
else:
    print("end")

>>>
0

继续探索,我们用 break 提前终止 for 循环

for i in range(3):
   print(i)
   if i % 2 == 0:
       break
else:
   print("end")

>>>
0

循环遇到 break 退出后,整个语句就结束,else 语句块也不执行了。

综上,我们可以得出这样一个结论,只有当循环里没有遇到 break 时,else 块才会执行。

Python 之父为什么要搞出这样的一种语法糖出来呢?这是我们常人没法理解的。不过「python之禅」告诉了我们答案:  “Although that way may not be obvious at first unless you’re Dutch.”

带着这个问题,我也在 StackOver Flow 找了一下答案,在平时的开发中真的很少有 for…else… 的应用场景,不过,像下面这种场景用 for else 还真是一种 pythonic 的用法。

当你用 for 循环迭代查找列表的中的某个元素时,如果找到了就提前退出,如果迭代完了还没找到需要以另外一种形式通知调用者时,用 for else 无疑是最好的选择。

for i in mylist:
   if i == target:
       break
   process(i)
else:
   raise ValueError("List argument missing terminal flag.")

如果不用 for…else… , 那么还需要专门建立一个临时标记变量来标记是否已经找到了

found = False
for i in mylist:
   if i == target:
       found = True
       break
   process(i)

if not found:
   raise ValueError("List argument missing terminal flag.")

当你想在房间里找某样东西时,只要在任意位置找到了,就停止继续搜查工作。但如果把整个房间都翻遍了,还没找到我们想要的东西,需要告诉人家说:这儿没有你要找的东西。遇到这样的情况用 for … else ,除此之外,最好不要用它

到此,关于“Python中怎么使用for else语句”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


网页标题:Python中怎么使用forelse语句
转载来于:http://jkwzsj.com/article/ggjedo.html

其他资讯