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
songkaiape
V2EX  ›  Python

Python else 还可以这样用?

  •  
  •   songkaiape · 2016-09-21 10:34:36 +08:00 · 4073 次点击
    这是一个创建于 2782 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for i in range(x):
        if i>80:
            break
    #这里遍历一个列表元素是否满足条件
    else:
        print('go')
    #如果全部都不满足条件会跳转执行这一步
    

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

    37 条回复    2016-09-22 11:07:18 +08:00
    tinyproxy
        1
    tinyproxy  
       2016-09-21 10:39:13 +08:00
    songkaiape
        2
    songkaiape  
    OP
       2016-09-21 10:41:41 +08:00
    Lonely
        4
    Lonely  
       2016-09-21 10:44:30 +08:00
    这也能发个帖
    tftk
        5
    tftk  
       2016-09-21 10:49:21 +08:00
    曾经面试的时候这么用了,被面试官批我逻辑不清晰呵呵呵
    songkaiape
        6
    songkaiape  
    OP
       2016-09-21 10:54:44 +08:00
    @tftk 可能那个面试官也不是很了解这个特性吧。第一次见确实感觉比较奇怪
    linuxchild
        7
    linuxchild  
       2016-09-21 10:55:53 +08:00 via iPhone
    @tftk 逻辑上看上去的确不清晰吧 可读性不太好
    ericls
        8
    ericls  
       2016-09-21 10:59:41 +08:00
    @tftk 应该的
    songkaiape
        9
    songkaiape  
    OP
       2016-09-21 10:59:55 +08:00   ❤️ 2
    @Lonely 不喜直接无视就好了啊,何必回复呢,我又不想骗你铜币。你知道不代表别人都知道。 V2 Python 初学者那么多,就当给他们提个醒
    prefere
        10
    prefere  
       2016-09-21 11:10:38 +08:00
    if else
    for else
    while else
    容易弄混
    jiang42
        11
    jiang42  
       2016-09-21 11:28:25 +08:00 via iPhone
    @tftk
    @songkaiape 如果我是面试官,有人敢写 for else ,肯定也是要批的,这不是熟不熟这个特性的问题,而是代码风格问题
    loryyang
        12
    loryyang  
       2016-09-21 11:31:31 +08:00
    这个 else 逻辑比较坑爹,不建议用,很多人看不懂,而且容易搞反
    TheCure
        13
    TheCure  
       2016-09-21 11:43:14 +08:00
    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
        14
    mgna17  
       2016-09-21 12:03:33 +08:00
    for - else 挺好用的啊, for 没有被 break 则会执行后续 else 中的代码。
    不过 else 这个词的确是个槽点,要是把 else 改成 than 之类的就好了。
    wizardforcel
        15
    wizardforcel  
       2016-09-21 12:08:45 +08:00
    effective python 第 12 条:不要在 for 和 while 循环后面写 else 块
    ytmsdy
        16
    ytmsdy  
       2016-09-21 12:13:46 +08:00
    还是按照正常的语法来吧,时间久了,很容易看错的
    echopan
        17
    echopan  
       2016-09-21 12:29:46 +08:00
    不要再 for 后面写 else,一般 if 后面写
    Trim21
        18
    Trim21  
       2016-09-21 12:37:11 +08:00
    for i in range(x):
    ....if i>80:
    ........break
    #这里遍历一个列表元素是否满足条件
    ....else:
    ........print('go')
    #如果全部都不满足条件会跳转执行这一步

    这两种在逻辑上有什么区别吗.....
    Kabie
        19
    Kabie  
       2016-09-21 13:02:43 +08:00
    ...特定情况很好用。。。

    说看不懂的只是写得太少了。。。
    yongzhong
        20
    yongzhong  
       2016-09-21 13:07:19 +08:00
    看标题知内容系列
    scipio
        21
    scipio  
       2016-09-21 13:33:24 +08:00
    没人吐槽代码中的这句注释么?

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

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

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

    那么问题来了,如果我有意在 for 的最后一次 loop 中 break ,那这个 else 会不会执行?
    mgna17
        33
    mgna17  
       2016-09-21 18:06:53 +08:00
    @laoyur 不会
    geew
        34
    geew  
       2016-09-21 18:23:26 +08:00
    @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
        35
    mingyun  
       2016-09-21 22:29:44 +08:00
    @songkaiape 这个解释不错
    techmoe
        36
    techmoe  
       2016-09-22 05:48:36 +08:00 via Android
    这个和 while 简单拼拼也能和 for 一样用的道理差不多吧
    shily
        37
    shily  
       2016-09-22 11:07:18 +08:00 via Android
    作为 Java 程序员一眼就猜到是 for-else 语句。
    看了楼上才明白 else 是在没有 break 的情况下才执行的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2371 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:09 · PVG 15:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.