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

Python没有赋值表达式真是不方便

  •  
  •   Draplater · Feb 2, 2014 · 7614 views
    This topic created in 4475 days ago, the information mentioned may be changed or developed.
    本来可以写成:
    if result=func1(...):
    print func2(result)
    因为没有赋值表达式,所以必须写成:
    result=func1(...)
    if result:
    print func2(result)
    15 replies    1970-01-01 08:00:00 +08:00
    gaicitadie
        1
    gaicitadie  
       Feb 2, 2014
    if result=func1(...):
    if result==func1(...):

    这两个容易弄混,python不支持这个功能,从根本上杜绝了看走眼导致bug的因素。
    python玩不出花样来,写程序的时候会觉得呆板,但维护自己几年前代码的时候你会感激python的呆板
    weakish
        2
    weakish  
       Feb 2, 2014
    Scheme/Lua也没有。

    赋值语句的返回值为所赋的值,这个我理解起来感觉蛮困难的——我觉得赋值语句应该是没有返回值,或者返回值为nil之类的东西(Haskell里类似赋值的操作返回值的类型是 `()`,纯副作用的返回值)。

    别的语言里,`if a == 1`,粗心少打一个`=`号,变成`if a = 1`就出问题了,但是Python就没这个问题。这一点上比较方便。
    dorentus
        3
    dorentus  
       Feb 2, 2014 via iPad
    我倒是不明白到底什么人什么情况下会手误写混 = ==
    不过会给读代码的人造成困惑倒是很有可能的…
    yuelang85
        4
    yuelang85  
       Feb 2, 2014
    @dorentus 写的时候,心里默读,二者都容易读成“等于”,于是写错了。。。。
    EPr2hh6LADQWqRVH
        5
    EPr2hh6LADQWqRVH  
       Feb 2, 2014   ❤️ 1
    @dorentus 任何人任何情况好嘛,人类本来就不是啥可靠玩意,不明白是因为写得少吧
    X_Del
        6
    X_Del  
       Feb 2, 2014
    当然可以用 := 代替赋值用的 = 啦。
    200
        7
    200  
       Feb 3, 2014
    代码只写一次 但是要读很多次 何必为了少打几个字而舍弃代码的直观性
    menic
        8
    menic  
       Feb 3, 2014
    Explicit is better than implicit.
    Simple is better than complex.
    Flat is better than nested.
    Readability counts.
    There should be one-- and preferably only one --obvious way to do it.
    workaholic
        9
    workaholic  
       Feb 3, 2014 via Android
    语言设计者说过,代码越少,错误越少
    FrankFang128
        10
    FrankFang128  
       Feb 3, 2014 via Android
    Python 真明智
    ericls
        11
    ericls  
       Feb 3, 2014 via Android
    为毛为不直接if func1():
    dorentus
        12
    dorentus  
       Feb 3, 2014
    @menic
    Yet here in real world coexist python 2.x & python 3.x, urllib & urllib2, etc...


    @ericls
    因为他下层的代码块里面用到了 func1() 的返回值。
    xiaket
        13
    xiaket  
       Feb 3, 2014
    真不喜欢这种方便, 在有赋值表达式的语言里也不会这么写...
    menic
        14
    menic  
       Feb 3, 2014
    @dorentus python提倡的和现实确实不同 但是语法是一个语言比较纯粹的东西 编译器和类库等比较偏实现 就有各种的tradeoff和banlance 就和社会主义国家的理念和现实差距也不小 但是从宪法和章程上 挑不出一点毛病
    blacklaw
        15
    blacklaw  
       Feb 6, 2014
    result=(lambda x=func1(...):(x, func2(x))[0] if x else x)()
    能实现,但好难读懂阿
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5463 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 87ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.