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

19591 次点击
所在节点    Python
156 条回复
bramblex
2017-09-12 10:53:04 +08:00
@Kisesy

类型约束,类型检查,函数类型,高阶类型,类型类。

就一个类型检查的话,说难听点,这叫做玩具,我花两天时间自己也能造一个。
Kisesy
2017-09-12 11:09:21 +08:00
@bramblex 额,我只是说类型检查...并不是它只有类型检查
这个 pyx 源码会被翻译为 C,然后交给 C 编译器编译,这些类型什么的是会当作 C 的一样看待
bramblex
2017-09-12 11:16:08 +08:00
@Kisesy

大哥,C 类型和没有类型没什么差别,真的。

跟你说个笑话,c 是强类型语言。
wwqgtxx
2017-09-12 11:25:23 +08:00
@Chingim 说到底,python 的默认行为就是所有 object 基类提供的需要重载的函数都是__xxx__的形式,而经常为了方便调用,在__buildin__中都提供了 xxx()的函数方便访问,这个不仅仅是在于 len 这一个,还有很多类似的其他属性,比如
getattr
setattr
iter
next
这些都是,说到底这只是人家的一种设计思路,作为一款 1991 年就诞生的语言,他本来就比 js 出现的要早得多,人家为什么要按照其他 oop 语言的习惯去设计

你要是说不适应,人家的构造函数还是叫__init__()呢,传递 this 指针还用 self 呢,这些其实都只是不同语言的设计理念问题,有什么对于不对之分,大家用的方便就好

计算机语言经过这么多年的发展,本来就产生了各种各样的风格,照你这么说 golang 更是一个异端,人家还非要把产量类型放在变量名后面呢

说到底不要用一种语言的定向思维写另一种语言,这样会掉进坑的
Chingim
2017-09-12 11:32:03 +08:00
@wwqgtxx 谢谢, 如果说这是风格, 我理解并接受.
但是如果说全局 len()方法是为了运行效率, 那么我并不是很理解
Eds1995
2017-09-12 11:32:07 +08:00
@iFlicker js 我一直在找括号,但是 python 就不用
kenshinji
2017-09-12 11:42:27 +08:00
@Miy4mori 用 IntelliJ 也很累,也许你打开的方式更高级一点?
alexzhou
2017-09-12 11:43:48 +08:00
啥也没说 找存在感
notreami
2017-09-12 12:36:07 +08:00
反正都不用长期维护,有啥好纠结的。尤其是 js,3 年前的 js 项目,还能正常工作嘛?
wxjeacen
2017-09-12 12:58:10 +08:00
[ x*2 for x in arr]
wxjeacen
2017-09-12 13:00:25 +08:00
其实我想说,js 怎么跟 python 比函数式,python 怎么能跟 clojure 比函数式。
SuperMild
2017-09-12 13:03:01 +08:00
@notreami 逻辑反了吧,如果 3 年前的项目现在能正常工作,就不用维护了呀。正因为不能正常工作,才需要维护呀。
RW667
2017-09-12 13:12:13 +08:00
非 python 语言最害怕 IDE 提示你多了或少了一个括号, 这搞不好就是一下午的事情。
类似 JS, JAVA, 行数一多,如果没有格式化好,看得真心累。
还有 RUBY, 经常最后两行都是 end , 不累吗?
python 的缩进看起来就很直观。
fyxtc
2017-09-12 13:14:08 +08:00
管你们怎么说。。。反正 python 我写起来贼爽。。。
WangYanjie
2017-09-12 13:25:53 +08:00
没怎么用过 js,所以不太好评论,不过你的 python 写的真入门

```
[x * 2 for x in x in arr]
```
jimrok
2017-09-12 13:33:09 +08:00
@RW667 python 没有 End 吗?有的呀

def help(self):
if a is not None:
print a

if b is not None:
print b

if c is not None:
print c

if d is not None:
print d

#end if d

#end if c

#end if b

#end if a

所以,我做为 ruby 党,没有觉得 end 很烦.
Osk
2017-09-12 13:33:20 +08:00
python 的缩进最头疼的是这些情况:编辑器不支持自动缩进,以及混用编辑器导致 tab 和 space 灾难,以及在 v2 贴代码。。。
其它情况还好,结构清晰,看着舒服。

不需要纠结:这个 { 是起一行呢还是写在本行尾?
lrxiao
2017-09-12 14:04:40 +08:00
@bramblex 严格说 Haskell 那叫对齐了..更蛋疼
神 tm C 类型跟没有没区别 你开了-Wconversion 吗
>> Python 抄 Haskell [来源请求]
Haskell 1.0 是 1990, Python 最早版本 0.9 也是 1990 在 Report/源码中均有对齐 /缩进
lrxiao
2017-09-12 14:06:34 +08:00
@bramblex 还是你说 lazy lazy 又不是只有 Hs 一家= =
RW667
2017-09-12 14:15:54 +08:00
@jimrok 你那只是注释好么? 并没有强制你写。

你试过用慢整终端登到服务器上,用 vi 打开一个.rb :$ 最后一屏 全是 end 往上再翻一屏还是全 end 的那种欲哭无泪的感觉么?

其实我上面还写错了,不是最后 2 排全是 END, 是最后 2 屏。

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

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

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

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

© 2021 V2EX