Python 里面需要用多行匿名函数的时候怎么办 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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

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

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

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

    def _lambda(x):
    ...
    joyee
        15
    joyee  
       Mar 1, 2015
    0.0 如果用python都需要写成多行,那不就是别匿名了还是起个名字增强可读性的信号吗?
    aheadlead
        16
    aheadlead  
    OP
       Mar 1, 2015
    @ruoyu0088 我觉得这是个好办法
    est
        17
    est  
       Mar 1, 2015
    可以inline写def 啊。。。
    tclh123
        18
    tclh123  
       Mar 1, 2015
    续行符啊
    xierch
        19
    xierch  
       Mar 2, 2015
    def anonymous():
    kk71
        20
    kk71  
       Mar 2, 2015
    js里面匿名函数用多了么…
    aheadlead
        21
    aheadlead  
    OP
       Mar 2, 2015
    @kk71 嘿嘿
    notcome
        22
    notcome  
       Mar 2, 2015 via iPhone
    改用 Haskell 就好啦。
    也是缩进语法,但 lambda chain 可以写在一列哦,当然多行 lambda 更是不在话下。
    wodemyworld
        23
    wodemyworld  
       Mar 13, 2015
    @love 你如果看到lambda表达式在经过“编译”后的名字,你会更崩溃的
    About     Help     Advertise     Blog     API     FAQ     Solana     954 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 21:50 PVG 05:50 LAX 14:50 JFK 17:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86