Python 里面需要用多行匿名函数的时候怎么办 - V2EX
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
aheadlead
V2EX    Python

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

  •  
  •   aheadlead 2015-03-01 14:36:30 +08:00 16657 次点击
    这是一个创建于 3882 天前的主题,其中的信息可能已经有所发展或是发生改变。
    lambda 感觉不够用啊…有时候用 filter 的时候觉得很不爽。
    在网上查了,似乎 Python 没有这个功能…

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

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

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

    def _lambda(x):
    ...
    joyee
        15
    joyee  
       2015-03-01 19:53:49 +08:00
    0.0 如果用python都需要写成多行,那不就是别匿名了还是起个名字增强可读性的信号吗?
    aheadlead
        16
    aheadlead  
    OP
       2015-03-01 20:21:34 +08:00
    @ruoyu0088 我觉得这是个好办法
    est
        17
    est  
       2015-03-01 22:06:24 +08:00
    可以inline写def 啊。。。
    tclh123
        18
    tclh123  
       2015-03-01 22:49:57 +08:00
    续行符啊
    xierch
        19
    xierch  
       2015-03-02 00:45:46 +08:00
    def anonymous():
    kk71
        20
    kk71  
       2015-03-02 09:28:22 +08:00
    js里面匿名函数用多了么…
    aheadlead
        21
    aheadlead  
    OP
       2015-03-02 10:23:26 +08:00
    @kk71 嘿嘿
    notcome
        22
    notcome  
       2015-03-02 12:56:28 +08:00 via iPhone
    改用 Haskell 就好啦。
    也是缩进语法,但 lambda chain 可以写在一列哦,当然多行 lambda 更是不在话下。
    wodemyworld
        23
    wodemyworld  
       2015-03-13 14:33:26 +08:00
    @love 你如果看到lambda表达式在经过“编译”后的名字,你会更崩溃的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6336 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 02:32 PVG 10:32 LAX 19:32 JFK 22:32
    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