推荐学习书目
› 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
songkaiape
V2EX  ›  Python

Python else 还可以这样用?

  •  
  •   songkaiape · Sep 21, 2016 · 5393 views
    This topic created in 3697 days ago, the information mentioned may be changed or developed.
    for i in range(x):
        if i>80:
            break
    #这里遍历一个列表元素是否满足条件
    else:
        print('go')
    #如果全部都不满足条件会跳转执行这一步
    

    比较好奇这个 else 居然可以正确执行,最开始我还为是代码缩进错误,官方有类似这种写法的范例么?

    37 replies  •  2016-09-22 11:07:18 +08:00
    songkaiape
    songkaiape
    OP
    Sep 21, 2016
    2
    Lonely
    Lonely
    Sep 21, 2016
    4
    这也能发个帖
    tftk
    tftk
    Sep 21, 2016
    5
    曾经面试的时候这么用了,被面试官批我逻辑不清晰呵呵呵
    songkaiape
    songkaiape
    OP
    Sep 21, 2016
    6
    @tftk 可能那个面试官也不是很了解这个特性吧。第一次见确实感觉比较奇怪
    linuxchild
    linuxchild
    Sep 21, 2016 via iPhone
    7
    @tftk 逻辑上看上去的确不清晰吧 可读性不太好
    ericls
    ericls
    Sep 21, 2016
    8
    @tftk 应该的
    songkaiape
    songkaiape
    OP
    Sep 21, 2016❤️2
    9
    @Lonely 不喜直接无视就好了啊,何必回复呢,我又不想骗你铜币。你知道不代表别人都知道。 V2 Python 初学者那么多,就当给他们提个醒
    prefere
    prefere
    Sep 21, 2016
    10
    if else
    for else
    while else
    容易弄混
    jiang42
    jiang42
    Sep 21, 2016 via iPhone
    11
    @tftk
    @songkaiape 如果我是面试官,有人敢写 for else ,肯定也是要批的,这不是熟不熟这个特性的问题,而是代码风格问题
    loryyang
    loryyang
    Sep 21, 2016
    12
    这个 else 逻辑比较坑爹,不建议用,很多人看不懂,而且容易搞反
    TheCure
    TheCure
    Sep 21, 2016
    13
    for a in xrange(10):
    for b in xrange(20):
    if something(a, b):
    # Break the inner loop...
    break
    else:
    # Continue if the inner loop wasn't broken.
    continue
    # Inner loop was broken, break the outer.
    break

    这个 else 逻辑很坑
    在我的项目里写这种代码绝对不给过 review
    mgna17
    mgna17
    Sep 21, 2016
    14
    for - else 挺好用的啊, for 没有被 break 则会执行后续 else 中的代码。
    不过 else 这个词的确是个槽点,要是把 else 改成 than 之类的就好了。
    wizardforcel
    wizardforcel
    Sep 21, 2016
    15
    effective python 第 12 条:不要在 for 和 while 循环后面写 else 块
    ytmsdy
    ytmsdy
    Sep 21, 2016
    16
    还是按照正常的语法来吧,时间久了,很容易看错的
    echopan
    echopan
    Sep 21, 2016
    17
    不要再 for 后面写 else,一般 if 后面写
    Trim21
    Trim21
    Sep 21, 2016
    18
    for i in range(x):
    ....if i>80:
    ........break
    #这里遍历一个列表元素是否满足条件
    ....else:
    ........print('go')
    #如果全部都不满足条件会跳转执行这一步

    这两种在逻辑上有什么区别吗.....
    Kabie
    Kabie
    Sep 21, 2016
    19
    ...特定情况很好用。。。

    说看不懂的只是写得太少了。。。
    yongzhong
    yongzhong
    Sep 21, 2016
    20
    看标题知内容系列
    scipio
    scipio
    Sep 21, 2016
    21
    没人吐槽代码中的这句注释么?

    > #如果全部都不满足条件会跳转执行这一步

    这样的理解是误人子弟。
    ifaii
    ifaii
    Sep 21, 2016
    23
    @Trim21 明显有不同吧,楼主的是 range(x)中所有的元素都不满足 if 时才执行 else ,你这样写就变成了只要遇到不满足 if 就执行 else
    21grams
    21grams
    Sep 21, 2016
    24
    我觉得挺好的,简洁,要不这么写的话,你还要加判断循环是执行完了还是 break 了。
    zhanglintc
    zhanglintc
    Sep 21, 2016
    25
    pythonic 进阶必备
    dalang
    dalang
    Sep 21, 2016
    26
    for else 在部分场合很好用呀。
    easing
    easing
    Sep 21, 2016
    27
    没用过的人表示逻辑确实不清晰,坑爹。。
    spikeLIN
    spikeLIN
    Sep 21, 2016 via iPhone
    28
    不建议这么用
    likuku
    likuku
    Sep 21, 2016
    29
    茴香豆的“茴”字有九九八十一种写法...
    lynx
    lynx
    Sep 21, 2016
    30
    这个特性挺好用的,没必要为了照顾一部分人改写成一堆很麻烦的语句
    这个语法也不属于偏门
    weyou
    weyou
    Sep 21, 2016
    31
    这个特性很好用啊, 我一直用,很久以前发现了就感觉逻辑很清晰自然啊,在循环查找时可以少定义一个变量来判断。类似的还有 try...except...else... 他们的含义就是如果没有 break ( except )就执行 else
    laoyur
    laoyur
    Sep 21, 2016
    32
    @mgna17
    > for - else 挺好用的啊, for 没有被 break 则会执行后续 else 中的代码。
    > 不过 else 这个词的确是个槽点,要是把 else 改成 than 之类的就好了。

    Python 初学者表示不知道这个特性,在没有去看文档的情况下,先斗胆自己猜测一下 for else 的意思:
    for 如果没有执行到 break ,就会执行 else 中的代码

    那么问题来了,如果我有意在 for 的最后一次 loop 中 break ,那这个 else 会不会执行?
    mgna17
    mgna17
    Sep 21, 2016
    33
    @laoyur 不会
    geew
    geew
    Sep 21, 2016
    34
    @laoyur 只要 break 执行了 else 里面的就不会执行
    In [626]: for i in range(10):
    .....: print i,
    .....: if i == 9:
    .....: break
    .....: else:
    .....: print 'else'
    .....:
    0 1 2 3 4 5 6 7 8 9
    mingyun
    mingyun
    Sep 21, 2016
    35
    @songkaiape 这个解释不错
    techmoe
    techmoe
    Sep 22, 2016 via Android
    36
    这个和 while 简单拼拼也能和 for 一样用的道理差不多吧
    shily
    shily
    Sep 22, 2016 via Android
    37
    作为 Java 程序员一眼就猜到是 for-else 语句。
    看了楼上才明白 else 是在没有 break 的情况下才执行的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2735 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 14:01 · PVG 22:01 · LAX 06:01 · JFK 09:01
    ♥ Do have faith in what you're doing.