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

辣鸡 for...else

  •  
  •   still97 · 2022-08-11 16:14:50 +08:00 · 2868 次点击
    这是一个创建于 836 天前的主题,其中的信息可能已经有所发展或是发生改变。
    for i in range(3):
    	if i == 1:
        	print(’第二次循环')
    else:
        print('for 循环结束')
        print('i 值', i)
    
    for i in range(3):
    	if i == 1:
        	print('第二次循环')
    then:
        print('for 循环结束')
        print('i 值', i)
    

    就很不理解,命名是 for...then...的意思,为什么要用 for...else...这么离谱的东西

    12 条回复    2022-08-12 16:41:54 +08:00
    mmm159357456
        1
    mmm159357456  
       2022-08-11 16:20:52 +08:00
    第一次看到 for...else 的时候我觉得是不是写错了,然后细看没写错
    hsfzxjy
        2
    hsfzxjy  
       2022-08-11 16:21:41 +08:00 via Android
    如果你 break 了,else 是不会执行的
    just1
        3
    just1  
       2022-08-11 16:25:54 +08:00
    用途是处理自然 for 完毕而不是 break

    语言真惨,这都被喷
    lookStupiToForce
        4
    lookStupiToForce  
       2022-08-11 16:28:09 +08:00
    python 哲学,有些东西写出来就是避免任何人用的(狗头

    你可以不理解,大家也都不理解
    https://stackoverflow.com/questions/9979970/why-does-python-use-else-after-for-and-while-loops

    换成 ifnobreak 就没任何歧义了,但现在没有这个关键字,所以要么忍着用并在 else 后加注释# nobreak ,要么别用
    wxf666
        5
    wxf666  
       2022-08-11 16:33:09 +08:00
    难道是不想加太多关键词了?

    then = 1 √
    else = 2 ×
    still97
        6
    still97  
    OP
       2022-08-11 17:58:27 +08:00
    @just1 没问题啊,用途肯定有的啊,只是说这个语法名称不是很 py
    still97
        7
    still97  
    OP
       2022-08-11 18:14:54 +08:00
    @lookStupiToForce 是的,一定要用的话得加注释
    ClericPy
        8
    ClericPy  
       2022-08-11 20:34:44 +08:00
    当年 try else 更魔性

    进来发现只是吐槽语义语法就没意思了

    勉强能理解凑合了, 毕竟语言作者母语可能也不是纯英语, 平时重试啥的还是挺常用的, 除了能直接 return 的地方, 很多时候 break 是需要 ifbreak 判断的
    yuruizhe
        9
    yuruizhe  
       2022-08-11 21:49:10 +08:00 via iPhone
    记得好像不建议用 for+else……
    就像不建议用 goto ?
    lzjun
        10
    lzjun  
       2022-08-12 00:53:29 +08:00
    把他理解为 break ... else .. 就对了
    still97
        11
    still97  
    OP
       2022-08-12 09:28:29 +08:00
    @ClericPy 使用场景肯定是有的,但是就是语义实在太不明确
    spiritlin
        12
    spiritlin  
       2022-08-12 16:41:54 +08:00
    当初看到这个语法也是非常迷,以至于一直搞反它的含义
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3721 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:05 · PVG 13:05 · LAX 21:05 · JFK 00:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.