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

Python 里面需要用多行匿名函数的时候怎么办

  •  
  •   aheadlead · Mar 1, 2015 · 17382 views
    This topic created in 4266 days ago, the information mentioned may be changed or developed.
    lambda 感觉不够用啊…有时候用 filter 的时候觉得很不爽。
    在网上查了,似乎 Python 没有这个功能…

    C++11 里面的 lambda 表达式感觉都好用些。

    谢谢
    23 replies  •  2015-03-13 14:33:26 +08:00
    9hills
    9hills
    Mar 1, 2015
    1
    lambda完全可以用普通函数替代。。
    Valyrian
    Valyrian
    Mar 1, 2015
    2
    def
    ffffwh
    ffffwh
    Mar 1, 2015
    3
    - 反斜杠换行
    - if语句 用 if表达式(<true return> if <bool exp> else <false return>)代替
    - 循环不明
    zhicheng
    zhicheng
    Mar 1, 2015
    4
    歇了吧,Python 这种强制缩进的语言,复杂的匿名函数未必方便多少。而且 Python 本身也支持函数的嵌套定义。所以无所谓了。
    icedx
    icedx
    Mar 1, 2015
    5
    def~
    love
    love
    Mar 1, 2015
    6
    这是我对python唯一的怨念了。
    def的话要想个名字啊,很烦。
    如果是资源管理方面的话可以用with来代替。
    binux
    binux
    Mar 1, 2015❤️1
    7
    是的,lambda 就是半残的,别死守着这货
    ruoyu0088
    ruoyu0088
    Mar 1, 2015❤️1
    8
    大量使用匿名函数会造成程序难以阅读。如果你需要一个多行的函数,那说明这个函数做了不少事情,应该给它起一个名字,这样阅读起来会方便很多,还可以为它写test case,调试的时候也方便。
    ngn999
    ngn999
    Mar 1, 2015 via iPhone
    9
    wodemyworld
    wodemyworld
    Mar 1, 2015
    10
    @love 你lambda不要名字啊?如果不用名字,那def用tmp1、tmp2就得了
    aheadlead
    aheadlead
    OP
    Mar 1, 2015
    11
    @9hills
    @Valyrian
    @icedx
    @zhicheng
    @love
    @ruoyu0088 其实我最烦起名字了…
    love
    love
    Mar 1, 2015
    12
    @wodemyworld 用tmp1看起来也太难受了吧。

    因为python的缩进语法,要做到象js那样的匿名应该是不可能的,不过象ruby的block那样是可以的。
    icedx
    icedx
    Mar 1, 2015
    13
    def a()
    def b()
    def c()
    ruoyu0088
    ruoyu0088
    Mar 1, 2015❤️2
    14
    如果真的不想起名字,那么就给一个固定的名字就好了,例如:

    def _lambda(x):
    ...
    joyee
    joyee
    Mar 1, 2015
    15
    0.0 如果用python都需要写成多行,那不就是别匿名了还是起个名字增强可读性的信号吗?
    aheadlead
    aheadlead
    OP
    Mar 1, 2015
    16
    @ruoyu0088 我觉得这是个好办法
    est
    est
    Mar 1, 2015
    17
    可以inline写def 啊。。。
    tclh123
    tclh123
    Mar 1, 2015
    18
    续行符啊
    xierch
    xierch
    Mar 2, 2015
    19
    def anonymous():
    kk71
    kk71
    Mar 2, 2015
    20
    js里面匿名函数用多了么…
    aheadlead
    aheadlead
    OP
    Mar 2, 2015
    21
    @kk71 嘿嘿
    notcome
    notcome
    Mar 2, 2015 via iPhone
    22
    改用 Haskell 就好啦。
    也是缩进语法,但 lambda chain 可以写在一列哦,当然多行 lambda 更是不在话下。
    wodemyworld
    wodemyworld
    Mar 13, 2015
    23
    @love 你如果看到lambda表达式在经过“编译”后的名字,你会更崩溃的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   3095 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 53ms · UTC 11:09 · PVG 19:09 · LAX 03:09 · JFK 06:09
    ♥ Do have faith in what you're doing.