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

2014-11-29 18:50:49 +08:00
 tywtyw2002
最近在和同学写课上的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。
4093 次点击
所在节点    Python
6 条回复
9hills
2014-11-29 19:30:21 +08:00
每个loop都write下累么,为啥不先拼接再写。。
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
2014-11-29 20:12:19 +08:00
@9hills 我也习惯这种。。
est
2014-11-29 21:14:57 +08:00
看起来有点像ruby的tap()
ruoyu0088
2014-11-29 21:55:37 +08:00
用map自然是不好,但是你改成的这个是什么,能运行吗?

fp.write(",".join(map(str, i)) + "\n") for i in phi_matrix
minbaby
2014-12-05 11:54:31 +08:00
哈哈, 列表推导式不是这么玩的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/150260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX