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
tywtyw2002
V2EX  ›  Python

关于 python 中 map 函数的适用情况

  •  
  •   tywtyw2002 · 2014-11-29 18:50:49 +08:00 · 4087 次点击
    这是一个创建于 3441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近在和同学写课上的group project,我在做code review的时候发现某个程序用这样一句话去把一个array中的数据写入到文本

    ```
    map(lambda x: fp.write(",".join(map(str, x)) + "\n"), phi_matrix)
    ```

    首先这个代码看懂没问题,但是我个人感觉在这样的情况下不应该用map去写这句话吧?

    原因:
    1. map首先是有返回值的,向这位同学这样写的话等于创建了一个无用的list,然后直接丢弃,如果不用的话为什么还要浪费资源去创建呢?
    2. 因为有lambda的存在,每次iterate 都想当等于call 一次function,这个也严重减慢了程序的运行速度吧?

    改成下面这样应该会比较好很多。

    ```
    fp.write(",".join(map(str, i)) + "\n") for i in phi_matrix
    ```

    那么问题来了,
    目前有没有一个内置的函数可以实现如上这样的code呢?换句话说就是把上面这样的code包装成函数形式。类似

    ```
    xxxxx(lambda x: fp.write(",".join(map(str, x)) + "\n"), phi_matrix)
    ```

    如果包装成了函数形式,那么上面的第2个不适用因素还是会存在吧?因为这样也用了lambda。
    6 条回复    2014-12-05 11:54:31 +08:00
    9hills
        1
    9hills  
       2014-11-29 19:30:21 +08:00
    每个loop都write下累么,为啥不先拼接再写。。
    9hills
        2
    9hills  
       2014-11-29 19:34:46 +08:00
    比如 fp.write('\n'.join([",".join(map(str, i) for i in phi_matrix]) + '\n')

    最后一个newline看心情。。
    realityone
        3
    realityone  
       2014-11-29 20:12:19 +08:00
    @9hills 我也习惯这种。。
    est
        4
    est  
       2014-11-29 21:14:57 +08:00
    看起来有点像ruby的tap()
    ruoyu0088
        5
    ruoyu0088  
       2014-11-29 21:55:37 +08:00
    用map自然是不好,但是你改成的这个是什么,能运行吗?

    fp.write(",".join(map(str, i)) + "\n") for i in phi_matrix
    minbaby
        6
    minbaby  
       2014-12-05 11:54:31 +08:00
    哈哈, 列表推导式不是这么玩的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   811 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:10 · PVG 06:10 · LAX 15:10 · JFK 18:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.