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

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

首页 > 看看 > 创业经验

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编程方式,写出高质量代码|进阶到编程高手的程序员修炼之道和代码整洁之道。

相关话题

  • 机械键盘轴的区别价格表(机械键盘不同色轴的区别)
  • 洗车泵价格及图片欣赏(#老司机秘籍)
  • 今天上午金乡小蒜价格(9月1日金乡)
  • 42双沟酒价格表和图片(经典浓香型白酒推荐)
  • 扁枣胡子手串价格(好看又不贵)
  • enko跑鞋价格(你所不知道的运动黑科技)
  • 福特5座suv的价格(家用大5)
  • 电动小气车价格和图片(2)
  • 湘雅医院心理科价格(患者求死)
  • 酷乐家涂鸦墙膜价格表(从50家创新公司)
  • 陕西今日毛猪价格走势(今日全国尿素出厂价格2022年5月31日)
  • 新加坡到泰国机票价格(英镑跌至新低)
  • 2016年大绯胸鹦鹉价格(大航海时代的伴手礼)
  • 波尔山羊价格养殖场报价(养一百只羊需要多少成本)
  • 盟迪奥按摩垫价格表(日百)
  • 废电机铜价格是多少(废铜回收价格最大上调300元)
  • 盟迪奥按摩垫价格表(貌美还实用)
  • rb3025太阳镜价格表(Ray)
  • pet切片今日基准价格(PET)
  • fresh身体乳专柜价格(六款夏季身体乳)

热门推荐

  • 古钟二锅头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