js 党可以吐槽一下 Python 吗

2017-09-12 00:49:17 +08:00
 sensui7

缩进真的不习惯, map 返回的竟然是一个迭代器, 也许这就是大佬吧, 匿名函数 还要写 lambda 这么长的单词, 列表的长度还要用 len 函数而不是 len 属性, 您的列表到底是不是对象呢? 要不是对象您的 append 方法又是怎么回事? 我大 js

js:
arr.map(x => x*2)
python:
list(map(lambda x: x*2, arr))

非引战, python 的优点就是生态环境, 我也是看中这点...

19589 次点击
所在节点    Python
156 条回复
dikT
2017-09-12 08:44:37 +08:00
});});});});});
jeffersonpig
2017-09-12 08:48:31 +08:00
说是“非引战”却偏偏干着引战的事情。那句话怎么说来着?
aristotll
2017-09-12 08:48:56 +08:00
缩进的确是昏招 其他 Python 语法特性不评价
ox180
2017-09-12 08:50:19 +08:00
@mooncakejs 您用了??
ox180
2017-09-12 08:53:31 +08:00
@gimp 我同意你的观点。
imn1
2017-09-12 08:59:00 +08:00
那么 js 中字典是不是对象呢?

js 我最混乱是这个:
a=new Array();
a[0]=1;
a[1]=2;
a[2]=3;
alert(a.length);
a["a"]=1;
a["b"]=2;
a["c"]=3;
alert(a.length);
b={"a":1, "b":2};
alert(b.length);
c=["aa","bb","cc"];
alert(c.length);

@jtsai #12 说的对,LZ 思想里把 list/tuple/dict/set 等都认为是 array 了
js 中就一个 array 的 class,里面写一次 length 就够了
而 python 中 list/tuple/dict/set 等是不同的 class,每个都写一遍 length 属性?不如提一个内置函数,对可数对象计算长度
a7063888
2017-09-12 08:59:30 +08:00
好一个非引战,刚接触 Python 缩进确实奇葩
ikeeper
2017-09-12 09:01:37 +08:00
返回迭代器是为了节省内存
gyorou
2017-09-12 09:07:21 +08:00
有了内置函数就不够面向对象了,更偏向于面向接口,要求特定的数据类型要实现某个接口。
在一切都是对象的语言中,是不存在数据类型这种东西的。所有的东西都是对象,包括所谓定义数据类型的 class 也是。
Chingim
2017-09-12 09:09:12 +08:00
@imn1 那__len__是怎么回事?
shuirong1997
2017-09-12 09:09:20 +08:00
@dikT 格式化代码+看前面的括号 就能分辨出哪个是哪个
Keyes
2017-09-12 09:10:48 +08:00
@sensui7 所以楼主可以去看看 Scala,我已经入坑无法自拔

Scala:
x.map(_*2)
bbsteel
2017-09-12 09:13:33 +08:00
关于缩进,至少让我看到的最烂的 python 依然能看得下去,但最烂的 js 代码。。。。
imn1
2017-09-12 09:23:49 +08:00
@Chingim
__len__也是调用内置 len()的吧?提供给自定义而已
oska874
2017-09-12 09:35:14 +08:00
不可以。
xbotter
2017-09-12 09:36:08 +08:00
说生态环境好 确认不是在黑 Java ?
Chingim
2017-09-12 09:38:04 +08:00
@imn1 len 调用 __len__

所以我就更不懂为什么 python 要提供一个 len 函数?
SuperMild
2017-09-12 09:39:33 +08:00
论面向对象,论语法强大优雅,当然是 ruby 了。
mimzy
2017-09-12 09:40:51 +08:00
@shihira #6 对于内置对象如 list,在 CPython 中它长度并不来自 __len__ 这个函数:

"No method is called for the built-in objects of CPython: the length is simply read from a field in a C struct. Getting the number of items in a collection is a common operation and must work efficiently for such basic and diverse types as str, list, memoryview, and so on."

-- Fluent Python, page 14

大家也可以读一下这页的 "Why len Is Not a Method",我理解的大意是说 "len is not called as a method because it gets special treatment as part of the Python data model".
mimzy
2017-09-12 09:42:46 +08:00
@Chingim #57 为了效率。见 #59

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

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

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

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

© 2021 V2EX