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 · 16156 次点击
    这是一个创建于 3539 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   5549 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 102ms · UTC 01:42 · PVG 09:42 · LAX 17:42 · JFK 20:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.