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 的优点就是生态环境, 我也是看中这点...

19071 次点击
所在节点    Python
156 条回复
ech0x
2017-09-12 06:05:40 +08:00
异教徒为什么要挑起圣战😂
laxenade
2017-09-12 06:17:10 +08:00
@msg7086 所以 ruby 才是最好的语言
lightening
2017-09-12 06:58:32 +08:00
Rubyist 飘过,笑而不语
asdf123101
2017-09-12 07:27:42 +08:00
在这种地方 list comprehension 比 map 要方便。整体感觉 Python 比 JavaScript 要方便,好用。很多 JavaScript 的新方法都有抄 Python,比如 JavaScript 有实验性的 list comprehension。
arischow
2017-09-12 07:41:49 +08:00
因为推崇用各种 comp 而不是 map,你自己没去了解怪 Python 咯。
arischow
2017-09-12 07:42:41 +08:00
@arischow 我也是非引战,但你这种标题本身就有引战的意味,并不是强行定义非引战就 OK
TangMonk
2017-09-12 07:44:15 +08:00
ruby 大法好
zaeneas
2017-09-12 07:48:26 +08:00
我记得 underscore.js 以及 lodash 也是 map 返回迭代器的;这样可以和 filter 之类混合时运算较快

lambda 我倒不是觉得什么问题,但是问题在于 lambda 只能撸一行,于是稍微复杂一点的 callback 都必须新声明一个函数

以及 default variable 的设计也是坑

不过对 callback 不友善才应该是 js 写惯了的对 python 不爽的地方
crab
2017-09-12 07:53:43 +08:00
chenqh
2017-09-12 07:58:03 +08:00
因为 len 是 builtin 方法啊,你也可以使用"a".__len__(),这样来获取长度
xiaozizayang
2017-09-12 08:05:52 +08:00
len 方法很突出 python 的思想
NoAnyLove
2017-09-12 08:06:53 +08:00
@shihira 我的观点恰恰相反,缩进让代码可读性增加,特别对于初学者,不会对无数的{}感到恐惧,同时也有强迫开发者优化逻辑和结构的被动效果。

@msg7086 Python 的数据模型应该算是非常优雅的了,所有基本的属性都有 builtin 的函数对应。话说,你写 Java 的时候难道重来没有纠结过:我去,这个对象到底应该用 size ? size()? length ?还是 length()?来获取长度?感觉 Ruby 的做法就是:不要纠结了,我全部都提供给你用。而 Python 的做法是:不要纠结了,统统用 len()就好了。

@lrxiao lambda 在 functional programming 里面很好用,不过 Guido 并不承认 Python 是一个 functional programming 语言,所以没有加强 lambda 的功能,只能用简单的表达式确实不如 Ruby 强大。不过感觉意图在于强迫开发者不要写过于复杂的 lambda 函数,有复杂功能的都该有个名字。gtqdg
wwqgtxx
2017-09-12 08:08:54 +08:00
python 万物皆对象,就算函数也是个对象
用 len()的好处是为了统一各种有长度的对象,有些对象的长度是动态获取的,你要是用 xxx.len 的话就必须要用 @property 把一个参数强行动态化了,从实用性来说还不如直接定义__len__()然后由编译器自动调用

不过 python 的 lambda 不能跨行的确是个大缺点
allenhu
2017-09-12 08:23:34 +08:00
@NoAnyLove 也吐槽一下代码缩进,简直就是为了标新立异,没有太大实际作用,新手也基本是从 helloword 开始,能有无数{}?如果对{}都感到恐惧,那基本也不用编程了,相反,{}的含义更容易理解。而且其他语言基本都是用{},没有额外学习成本
msg7086
2017-09-12 08:24:22 +08:00
@NoAnyLove 是啊,Ruby 就是你想怎么写就怎么写,觉得怎么写舒服就怎么写。
est
2017-09-12 08:25:22 +08:00
楼主还没发现 [].sort() 的坑说明你业务写得还不够多。。。
TabGre
2017-09-12 08:27:15 +08:00
@Nitroethane Lisp 不服😜
popok
2017-09-12 08:28:24 +08:00
py 和 js,我支持 js
gimp
2017-09-12 08:35:34 +08:00
7L 说的对,你这写法很不 pythonic
metaquant
2017-09-12 08:39:10 +08:00
以我浅薄的编程经验,语法就是个日久生情的过程,刚开始用觉得别扭,之后觉得顺手,最后就觉得优美了。想我当年从 matlab 转到 python 时,还觉得 python 语法难看了,现在回头看,觉得当时写 matlab 时全局变量满天飞简直就是个灾难

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

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

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

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

© 2021 V2EX