那些 Python 语言设计上的重大失误

2021-12-02 05:12:29 +08:00
 AndyAO

python 系统性的限制了代码的灵活执行,不管是 lambda 还是 eval 都只能运行表达式,应用场景十分有限,极大的限制了 python 语言的表现力。

本来能够很容易就写出来的代码,需要绕弯子。

这种限制在当前没有任何站得住脚的合理解释,非要说就只能扯 pythnoic 意识形态大旗。

python 还有个更糟糕的设计是用缩进当做语法,也许在 30 年前能少敲几下键盘,或者让缩进看起来更一致和美观,但是现在的各种 IDE 全都能自动解决这些问题,根本就不需要人操心。

不过这些设计上的问题总会有些争论的,毕竟大家对自己常用的工具都挺有感情的。

设计是好的还是坏的,到现在是否还合时宜,有个更客观的评价标准,就是那个设计是否影响到了最近才出现的主流语言,如果那个设计是后继无人的,那么必定是坏的。

就拿缩进敏感来说吧,算是典型的后继无人,Swift ? Go ? Rust ? Kotlin ?这种糟糕的设计已经被后人全面抛弃。

python 还有哪些糟糕的设计?

以设计的传承性来看,你可能会发现更多败笔,它们已经被历史无情地扔到垃圾堆中了。

毕竟很多东西都有其时代局限性。

9523 次点击
所在节点    Python
89 条回复
flniu
2021-12-02 13:46:40 +08:00
@TypeError
“默认参数不能为可变对象,比如 list ,这个问题搞垮了一家创业公司”
这个真的是大坑。
flniu
2021-12-02 13:49:23 +08:00
用缩进表示结构的另一个主流语言是 Yaml (虽然只是标记语言,不是编程语言)。
kett
2021-12-02 13:57:36 +08:00
彼之砒霜,吾之蜜糖。
ykk
2021-12-02 13:58:58 +08:00
要不是我写了三年 python 你说的我就信了
lingo
2021-12-02 14:17:30 +08:00
闭包那帖子也是你发的吧,看了那帖子后,看到这个吐槽 python 的我就觉得。不好意思打扰了。
agagega
2021-12-02 14:24:32 +08:00
@TypeError
Native Extension 需要和解释器内部实现耦合这个问题 Ruby 也有,其他解释型语言应该也有。解决办法之一就是像 C++或者 JavaScript 这样定个标准,不同实现都按照标准的来,这样 Native 扩展也能有一套统一接口。不过这些脚本语言都是靠一个实现发家的,自己给自己做个 Spec 没啥动力,也不够灵活,所以都拒绝搞标准,实现即标准。
karloku
2021-12-02 14:34:35 +08:00
cpython 慢没办法回避的. 看隔壁 ruby 的 mri 从 2.0 开始到 3.0 一直在优化性能, JIT 已经是成了解释器标配.
而 cpython 从 2 升级到 3 解释器性能还是大幅倒退的... 最近 3.10 才总算是比 3.8 快了那么点
betteryjs
2021-12-02 14:41:34 +08:00
GIL !
SleipniR
2021-12-02 15:03:32 +08:00
都来说说林志玲的脸到底哪里最难看
ipwx
2021-12-02 15:15:45 +08:00
Python 基本上是成也 CPython ,败也 CPython 。

基本上很多核心设计都是为了 glue c extension 而存在的。。。这个嘛,对于 web developer 就是傻逼,对于 data scientist 就是圣经。其他任何语言,包括 ruby, java, c#,哪个比 python 更容易黏合 c/c++ 扩展上机器学习、神经网络的?顶多还有个娘胎中的 julia 。
ipwx
2021-12-02 15:17:12 +08:00
因为有了 GIL 和引用计数,不需要考虑多线程,是个会写代码的基本都能包装一个 C++ 的算法给 Python 。。。

搞(数学)算法的,大部分人都没有多少编程功底。但是他们能贡献大量算法,才有了今天的数据科学的繁荣。
ipwx
2021-12-02 15:17:52 +08:00
如果加上 JIT 。。。

看看 pybind11 和 V8 bind 在 C++ 里面的巨大编程难度差别就懂了。。。
pengtdyd
2021-12-02 15:20:02 +08:00
燕雀安知鸿鹄之志
vanton
2021-12-02 15:28:42 +08:00
你这是本末倒置,缩进是给人看的,括号才是给机器看的。

没有缩进的任何代码,人来看都很费力。
ninjashixuan
2021-12-02 15:33:19 +08:00
@ipwx 很有道理,所以 Python 除了数据分析和 AI ,搞其他的都是天然劣势。
deplivesb
2021-12-02 15:36:40 +08:00
好家伙,数括号才是最蛋疼的吧
kilasuelika
2021-12-02 16:04:48 +08:00
@deplivesb 就算用括号,也有自动格式化啊,为什么要数括号?
ipwx
2021-12-02 16:52:55 +08:00
@kilasuelika 意思是,既然只有正确缩进了,大家才能看得清,那“缩进”本身就不再是“自由”,本来就是 must 。

而且既然每个语言都有自己的“缩进个数规范”,那本来这也不是“自由”,本来也是 must 。

只不过 python 把这件事放到语言层面规定了下来而已。

所以只是大家不爽它不自由,而不是缩进本来有错。
ipwx
2021-12-02 16:53:23 +08:00
@kilasuelika 按你的逻辑,IDE 也有自动缩进辅助啊,也不难写 hhh
yuruizhe
2021-12-02 17:04:47 +08:00
@chengxiao 那这不是既要又要了嘛,没有银弹的

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

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

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

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

© 2021 V2EX