科技改变生活 · 科技引领未来

  • 首页
  • 资讯
  • 技术
  • 百科
  • 问答
  • 学习
  • 看看
  • 站长
  • 生活
  • 快讯

首页 > 看看 > 创业经验

else是什么意思 else什么意思中文

时间:2022-08-25 09:03 作者:丁书明

导读:本文会详细介绍一个小技巧,帮助你用符合Python风格的方式(Pythonic方式)来编写程序。

作者:布雷特·斯拉特金(Brett Slatkin)

来源:华章科技

Python的循环有一项大多数编程语言都不支持的特性,即可以把else块紧跟在整个循环结构的后面。

for i in range(3):
    print(&39;Loop&39;, i)
else:
    print(&39;Else block!&39;)
>>>
Loop 0
Loop 1
Loop 2
Else block!

奇怪的是,程序做完整个for循环之后,竟然会执行else块里的内容。既然是这样,那为什么要叫“else”呢?这应该叫“and”才对。在if/else结构里,else的意思是:如果没执行前面那块语句,那就执行else块。在try/except结构里,except也是这个意思:如果前面那块语句执行失败,那就执行except块。

try/except/else结构里的else依然遵循这样的理念,它的意思是:如果没有异常需要处理,那就执行这块语句。try/finally结构里的finally同样很直观,意思是:不管前面那块代码执行得如何,最后都要执行finally块代码。

了解了else、except、finally等在上面那些结构里的用法,Python新手可能就觉得,for/else结构里的else也是这个意思,即如果循环没有从头到尾执行完,那就执行else块。实际上恰恰相反,如果循环没有从头到尾执行完(也就是循环提前终止了),那么else块里的代码是不会执行的。在循环中使用break语句实际上会跳过else块。

for i in range(3):
    print(&39;Loop&39;, i)
    if i==1:
        break
else:
    print(&39;Else b1ock!&39;)
>>>
Loop 0
Loop 1

还有一个奇怪的地方是,如果对空白序列做for循环,那么程序立刻就会执行else块。

for x in []:
    print(&39;Never runs&39;)
else:
    print(&39;For Else block!&39;)
>>>
For Else block!

while循环也是这样,如果首次循环就遇到False,那么程序也会立刻运行else块。

while False:
    print(&39;Never runs&39;)
else:
    print(&39;While Else block!&39;)
>>>
While Else block!

把else设计成这样,是想让你利用它实现搜索逻辑。

例如,如果要判断两个数是否互质(也就是除了1之外,是不是没有别的数能够同时整除它们),就可以用这种结构实现。先把有可能同时整除它们的数逐个试一遍,如果全都试过之后还是没找到这样的数,那么循环就会从头到尾执行完(这意味着循环没有因为break而提前跳出),然后程序就会执行else块里的代码。

a = 4
b = 9
for i in range(2, min(a, b) + 1):
    print(&39;Testing&39;,i)
    if a % i == 0 and b % i == 0:
        print(&39;Not coprime&39;)
        break
else:
    print(&39;Coprime&39;)
>>>
Testing 2
Testing 3
Testing 4
Coprime

实际工作中,笔者不会这样写,而是会改用辅助函数完成计算。这样的辅助函数有两种常见的写法。

第一种写法是,只要发现某个条件成立,就立刻返回,如果始终都没碰到这种情况,那么循环就会完整地执行,让程序返回函数末尾的那个值作为默认返回值。

def coprime(a, b):
    for i in range(2, min(a, b) + 1):
        if a % i == 0 and b % i == 0:
            return False
    return True

assert coprime(4, 9)
assert not coprime(3, 6)

第二种写法是,用变量来记录循环过程中有没有碰到这样的情况,如果有,那就用break提前跳出循环,如果没有,循环就会完整地执行,无论如何,最后都返回这个变量的值。

def coprime_alternate(a, b):
    is_coprime = True
    for i in range(2, min(a, b) + 1):
        if a % i == 0 and b % i == 0:
            is_coprime = False
            break
    return is_coprime
assert coprime_alternate(4, 9)
assert not coprime_alternate(3, 6)

对于不熟悉for/else结构的人来说,刚才那两种写法都是比较清晰的方案,大家可以根据情况选择其中的一种。

for/else或while/else结构本身虽然可以实现某些逻辑表达,但它给读者(也包括你自己)带来的困惑,已经盖过了它的好处。因为for与while循环这种简单的结构,在Python里面读起来应该相当明了才对,如果把else块紧跟在它的后面,那就会让代码产生歧义。所以,请不要这么写。

要点

  • Python有种特殊的语法,可以把else块紧跟在整个for循环或while循环的后面。
  • 只有在整个循环没有因为break提前跳出的情况下,else块才会执行。
  • 把else块紧跟在整个循环后面,会让人不太容易看出这段代码的意思,所以要避免这样写。

关于作者:布雷特·斯拉特金(Brett Slatkin),Google首席软件工程师,他是Google Surveys的联合技术创始人,也是PubSubHubbub协议的共同创造者之一。此外,Slatkin还发布了Google的第一个云计算产品——App Engine。早在15年前,Slatkin就开始在工作中使用Python管理Google大量的服务器群。他拥有纽约哥伦比亚大学计算机工程专业学士学位。

本文摘编自《Effective Python:编写高质量Python代码的90个有效方法》(原书第2版),经出版方授权发布。

延伸阅读《Effective Python》(原书第2版)

推荐语:Python编程进阶必读,基于Python3.8,新增31条建议!掌握Pythonic编程方式,写出高质量代码|进阶到编程高手的程序员修炼之道和代码整洁之道。

相关话题

  • 一斤黄金多少钱(黄金多钱一斤)
  • 红豆与赤小豆的区别(去湿气是红小豆还是赤小豆)
  • 见解是什么意思(什么叫做见解)
  • 天蝎座和水瓶座(最疼水瓶女的是天蝎男)
  • 二次函数顶点坐标(配方法二次函数顶点坐标)
  • 额头窄适合什么发型(男士额头窄适合什么发型)
  • 烤箱怎么预热(烤箱怎么预热步骤)
  • 我的世界中文版(我的世界中文版下载安装)
  • 吴下阿蒙的意思(吴下阿蒙现指什么)
  • 神舟电脑官网(神舟电脑客服官网首页)
  • 汽油机和柴油机的区别(汽油机还是柴油机耐用)
  • 排酸肉与鲜肉的区别(正在变瘦的征兆)
  • 胆结石严重吗(女人胆结石的10个征兆)
  • 黔驴技穷的意思(黔驴技穷的穷是什么意思)
  • 海信售后电话(海信电视售后电话)
  • 工作描述怎么写(普工岗位工作描述)
  • 惠而浦空调怎么样(惠而浦空调是杂牌吗)
  • 好看动漫推荐(中国十大最火的动漫)
  • 蛋白质粉怎么吃(蛋白粉正确喝法)
  • 养老保险可以补交吗(60岁一次交清养老保险)

热门推荐

  • 古钟二锅头46度多少钱(全国喝啥酒)
  • 顺丰寄50斤冰箱多少钱(评测五大快递平台)
  • 做饭保姆一个月多少钱(52岁阿姨哭诉)
  • 鹿茸补肾丸多少钱一盒(参茸鞭丸肾阴虚者能吃吗)
  • 北京换烤瓷牙多少钱(明星为整牙有多拼)
  • 乐高培训加盟费多少钱(乐高教育取消授权波及上百门店)
  • 西凤酒15年多少钱一瓶(价不高待客又不失面子的纯粮酒)
  • 聚酰亚胺多少钱一公斤(酶中战斗机)
  • 公司入职体检一般多少钱(通过聘多多找到工作)
  • 插座维修上门多少钱(换个插座还用找电工)
  • 二元店一年挣多少钱(揭秘)
  • ctfau750钻戒多少钱(黑客游戏和解谜游戏的关联之处)
  • 23年工龄退休拿多少钱(缴费23年)
  • 平衡霜多少钱一瓶(日本POLA旗下这个小众牌子THREE)
  • 欧米茄手表电池多少钱一块(福布斯公布运动员收入榜单)
  • 正规医院种植牙多少钱一颗(成本百元却卖上万)
  • 微信能卖多少钱(微信账号被公开买卖)
  • 奔富707多少钱一瓶(宴请时的)
  • 超声波焊接机多少钱一台(关于超声波焊接)
  • 一鸣加盟费要多少钱(一鸣真鲜奶吧多少钱)

丁书明

关注
免责声明:本文章由会员“丁书明”发布,如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务 如因作品内容、版权和其他问题请于本站联系

关注排行榜

  1. 1新百伦多少钱(都有一个)
  2. 2活牛多少钱一斤(牛价丨2月11日)
  3. 3铝单板多少钱一平方(铝单板厂家报价大揭秘)
  4. 4一箱牛奶多少钱(实体店一箱牛奶卖50元)
  5. 5普洱茶一般多少钱(有的普洱茶只要几十有的上万)
  6. 6换手机外屏多少钱(盘点各个旗舰手机换屏价格)
  7. 7一辆电动车多少钱(最低不到8000元)
  8. 8巴宝莉围巾多少钱(花2580元网购的博柏利围巾竟系假货)
  9. 9养老保险每年多少钱(2021年养老保险缴费15年)
  10. 10每升油多少钱(​定了)

编辑精选

Copyright ©2009-2022 KeJiTian.Com, All Rights Reserved

版权所有 未经许可不得转载

增值电信业务经营许可证备案号:辽ICP备14006349号

网站介绍 商务合作 免责声明 - html - txt - xml