不知道为什么,我很厌恶 map()

12 天前
 levelworm

首先声明一下,我承认我是个很烂的程序员。我甚至不愿意承认自己是程序员。(也许这就是原因?)

因为公司转向 Flink ,所以今天决定学习一下。但是不知道为什么,看到 map()就觉得生理上的厌恶,和看见一只蟑螂一样。

其实我自己也不能理解这种厌恶--我能理解为什么自己不喜欢,因为 map()本身没有可读性,你看到这个,就得去里头看到底是调用了什么函数。但是我不知道为什么我会有生理上的厌恶。同理,我在 PySpark 里看到 map(),也会极其厌恶,尤其是配合 lambda 食用,则更加厌恶。比如说

result = map(lambda x: x["id"], data["item"])

看到一次我就恶心一次。

不知道有没有类似的朋友,你们是如何克服的?我看了一下,Flink 里似乎无法避免 map()。所以只能自己习惯了。

5502 次点击
所在节点    程序员
44 条回复
iseki
12 天前
语法设计导致的吧,我也非常讨厌 Python 的 lambda ,非常丑陋。但是 Kotlin 的很美
aijam
12 天前
一直印象中 Python community 就是推荐 comprehension over map 。
map 唯一实用的场景是 zip 多个 list 的时候可以 map(fn, list1, list2, ...)。
非必要不 map
NickLuan
12 天前
不习惯可能是因为 map/filter 这些函数独立出来了,如果像 js 那样挂在 array 下面会可读好一些?
guanhui07
12 天前
我也非常喜欢 map/filter/reduce/chunk...,意图+操作,可读性强,且非常直观

一个 collection 解决所有事
txhwind
12 天前
map 写前面确实反人类了,像 C# Linq 一样 data["item"].select(x => x["id"]) 感觉自然一点
TWorldIsNButThis
12 天前
python 的 lambda 本来就恶心
clino
12 天前
要不楼主给一个感觉可读性比较好的写法?
然后可以弄一个 python 包来支持这种可读性更好的写法,这样至少自己要写的时候可以用。
TWorldIsNButThis
12 天前
@w568w map 从来都只有映射的意思
DOLLOR
12 天前
估计 python 作者不喜欢 lambda 和 fp ,故意把 lambda 和 map 这些设计得非常恶心。
别的语言都没那么难看。
比如 js 的 map 就爽多了。
hj960511
12 天前
ChrisFreeMan
11 天前
所以我现在只用 typescript ,hover 文档一眼就知道了。另外 python 支持 TypedDict https://peps.python.org/pep-0589/
julyclyde
11 天前
map 和 foreach 其实一码事吧
就算用 foreach 你也得进去看看到底执行了啥呀
fsdrw08
11 天前
我去年 6 月写了一段 Python map 的代码,现在看回去,已经看不懂这段代码的作用了
simenet
11 天前
你都用 python 了 还恶心啥哦
RangerWolf
11 天前
op 无需 pua 自己,觉得他恶心不是你的错
map 我也觉得很反人类,只不过可能没有 op 反感的强度高而已
我记得 effective python 里面也不推荐使用 map 函数(记错请各位轻拍)
RangerWolf
11 天前
应该没记错
Item 27: Use Comprehensions Instead of map and filter
lululau
11 天前
@RangerWolf #35 列表解释不就是 filter(select) + map 吗,就换种写法而已

这点弯转不过来,建议多做做算法题训练一下
jim9606
11 天前
只针对 python

我理解 lambda 是做简单调用(单个表达式)的,例如给函数绑定参数这种没啥重用价值的事,复杂需要的应该用命名函数,不想污染命名空间也可以用内部函数,反正要命名。

另外通常 map/filter/reduce 可以展开为 for..in 循环,而且这种更好按行断点。
Yuanlaoer
11 天前
感受,没有客观对错,或者说你感受到的都可以说是“真实的”和“对的”。你觉得厌恶就是厌恶。

就算你知道还有 100 个人也厌恶,能改变你什么吗?
galenjiang
10 天前
map 本来就是需要用读来确认用途的,比较好的做法,结合 pointless 来做,getId = map(lambda x: x["id"]); getId(data['item']),你连什么是函数式编程的门槛都没入,谈不上厌恶...

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

https://tanronggui.xyz/t/1108464

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

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

© 2021 V2EX