V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
WayToGo
V2EX  ›  Python

for/else、 while/else 和 try/else 大家用的多吗?

  •  
  •   WayToGo · 2019-01-31 17:36:42 +08:00 · 3757 次点击
    这是一个创建于 2129 天前的主题,其中的信息可能已经有所发展或是发生改变。
    因为与 if/else 的差别较大,会不会在实际工作中造成误解?
    第 1 条附言  ·  2019-02-01 12:12:50 +08:00

    代码没有格式化,造成了误解,更新一下:

    for item in my_list:
        if item.flavor == 'banana':
            break
    else:
        raise ValueError('No banana flavor found!')
    
    第 2 条附言  ·  2019-02-01 12:20:24 +08:00
    1. for/else 这种写法比较简单。如果没有 else 语句,那么可能需要有个多一个 flag 变量来标识;
    2. 因为与 if/else 的意思差别大,而恰巧碰到对这个语法不熟的,会造成逻辑上的误解;

    所以,个人觉得可以用,但要加些注释。
    24 条回复    2019-02-11 15:38:56 +08:00
    ysc3839
        1
    ysc3839  
       2019-01-31 17:37:35 +08:00 via Android
    用的不多。我认为不会。
    zhoudaiyu
        2
    zhoudaiyu  
       2019-01-31 18:17:00 +08:00 via iPhone
    偶尔用
    lniwn
        3
    lniwn  
       2019-01-31 18:17:01 +08:00
    《流畅的 Python 》中有谈到这个问题,个人觉得,这种用法对于一般人不会造成误解,对于专门研究语言的人,有可能会造成误解。这种用法已经是历史遗留问题,适应就好,不算奇巧淫技。
    tiedan
        4
    tiedan  
       2019-01-31 18:23:16 +08:00
    try/else 偶尔会用
    lihongjie0209
        5
    lihongjie0209  
       2019-01-31 18:27:58 +08:00
    没这种写法之前怎么写代码? 代码不只是给自己看的, 也是给别人看的
    WayToGo
        6
    WayToGo  
    OP
       2019-01-31 18:41:09 +08:00
    @ysc3839 @zhoudaiyu @tiedan 谢谢回复
    @lihongjie0209 嗯,同意
    @lniwn 我也是在《流畅的 Python 》里看到的,对于 for/else 一开始我的理解是错误的。
    书上的 for/else 例子
    for item in my_list:
    if item.flavor == 'banana':
    break
    else:
    raise ValueError('No banana flavor found!')
    junjieyuanxiling
        7
    junjieyuanxiling  
       2019-01-31 19:26:48 +08:00 via Android
    知道,但是一次也没用过。
    L2AKnG8GXx60bc6P
        8
    L2AKnG8GXx60bc6P  
       2019-01-31 19:54:38 +08:00
    经常用,超好用
    Tink
        9
    Tink  
       2019-01-31 21:28:43 +08:00 via iPhone
    我居然不知道
    Hopetree
        10
    Hopetree  
       2019-02-01 00:30:28 +08:00
    我只知道 try/else/finally for/else 和 while/else 我怎么没见过,能给我例子我见识一下吗
    Hopetree
        11
    Hopetree  
       2019-02-01 00:31:42 +08:00
    @WayToGo 这个能算 for/else 吗?这命名就是 if/else,只不过放在了 for 循环里而已,层级都不同好吧
    thedrwu
        12
    thedrwu  
       2019-02-01 08:25:15 +08:00 via Android   ❤️ 1
    其实从语感上说,那个不该叫 else,而应该叫 otherwise。
    Qzier
        13
    Qzier  
       2019-02-01 08:42:13 +08:00 via iPhone
    基本很少有用
    lniwn
        14
    lniwn  
       2019-02-01 09:12:48 +08:00 via iPhone
    @WayToGo 这个例子中,进入 else 就表示循环正常结束,而不是通过 break 结束。
    marcong95
        15
    marcong95  
       2019-02-01 09:39:30 +08:00
    当年直接看官网 tutorial 学的 Python,感觉 for/else、while/else 挺好用的。但是工作中不用 Python,偶尔自己写一下的时候都很难想起来
    XIVN1987
        16
    XIVN1987  
       2019-02-01 09:40:11 +08:00 via Android
    感觉挺好的,,其他语言也该加上
    holyzhou
        17
    holyzhou  
       2019-02-01 09:49:20 +08:00
    在用,用的还挺多的 记得<<编写高质量 python 代码的 59 个有效方法>>里面还有一节说,不建议用,我个人觉得还行
    piqizhu
        18
    piqizhu  
       2019-02-01 09:51:50 +08:00
    很少用
    guanhui07
        19
    guanhui07  
       2019-02-01 10:01:05 +08:00
    很少用
    princelai
        20
    princelai  
       2019-02-01 10:02:38 +08:00
    自从知道这个语法了解了以后,while/else 和 try/else 用的很多,非常好用,for/else 用的不多,不过看流畅的 python 里说好像的确不建议多用
    freakxx
        21
    freakxx  
       2019-02-01 10:09:30 +08:00
    @Hopetree

    这两种跟 try 也是一样,
    循环结束后执行,

    可配合 break
    okwork
        22
    okwork  
       2019-02-01 12:33:26 +08:00 via Android
    for else 用的少,其他的都是高频用法吧
    TuringGunner
        23
    TuringGunner  
       2019-02-01 12:42:53 +08:00 via Android
    用 try else 比较多,其他两个基本不用
    butterfly1211
        24
    butterfly1211  
       2019-02-11 15:38:56 +08:00
    用的非常多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2778 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.