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

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

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

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

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

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

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

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

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

python 还有哪些糟糕的设计?

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

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

9489 次点击
所在节点    Python
89 条回复
mind3x
2021-12-02 06:32:33 +08:00
对 Python 不发表意见,不过 Scala 从 2 到 3 是加上了缩进语法块: https://docs.scala-lang.org/scala3/reference/other-new-features/indentation.html
makelove
2021-12-02 07:52:18 +08:00
其实我以前还在用 python 时觉得缩进也不是那么另人难受,但转了 js 后发现缩进的确不如 {} 实用

至于 lambda 只有表达式就更糟糕了,用 js 的每个人匿名函数用得飞起,估计让他转用 py 发现不能用了要先定义一个有名函数再传名字估计会一脸懵逼
xupefei
2021-12-02 07:54:23 +08:00
今天刚碰到一个:isinstance(False, int) = True

我以为我写的是 C😂
silkriver
2021-12-02 08:19:23 +08:00
楼上的需求应该用 type(False) == int
silkriver
2021-12-02 08:21:26 +08:00
运行任意代码应该用 exec()
sudoy
2021-12-02 08:49:31 +08:00
我倒是觉得 python 的缩进语法比 js 的大括号好用,js 写完代码回头去 debug 的时候还得数括号
15855pm
2021-12-02 09:00:35 +08:00
@xupefei 这个为啥等于 true ,求解释😅
pythonee
2021-12-02 09:04:59 +08:00
GIL ?
adoal
2021-12-02 09:05:19 +08:00
矫情
Kilerd
2021-12-02 09:08:21 +08:00
你可以吐槽 lambda ,但是锁进这个除了古早时代需要用游标卡尺,但是在现代编辑器下早就没有这个问题了

点进来之前我以为会吐槽 type hints , 海象操作符之类的,原来是吐槽这些,打扰了
chengxiao
2021-12-02 09:12:22 +08:00
这些都不是 python 的槽点,python 已经很好用了,比起这些他最大的错误 就是 慢!
janxin
2021-12-02 09:14:22 +08:00
你不可能预见到 20-30 年后会发生什么...
lizytalk
2021-12-02 09:16:54 +08:00
GIL
2i2Re2PLMaDnghL
2021-12-02 09:20:37 +08:00
Haskell 缩进敏感
(你如此大胆竟然敢喷 Haskell 的语法?(笑

@pythonee 不是 Python 的语言设计,而是 CPython 的实现细节。PyPy 和 IronPython 我记得都是没有这个机制的,也有人提出了一个提案通过介于函数式和 CoW 的形式来移除 GIL 又能适应 C extension 。

@sudoy 这个论点很早在 Lisp 那边被驳斥过了。括号从来不用数,括号不是给人看的而是帮助语法分析器理解的,正确的缩进才是给人看的。
我非常倾向于认为 JS 的自动代码格式化不应该由括号自动产生缩进,而是应该由缩进自动产生正确的括号。
adoal
2021-12-02 09:25:17 +08:00
@2i2Re2PLMaDnghL PyPy 也有 GIL……曾经尝试用 STM 来做一个无 GIL 的版本,然后没有下文了
fgwmlhdkkkw
2021-12-02 09:33:07 +08:00
确实有一点,其实可以混合支持{}和缩进……
2i2Re2PLMaDnghL
2021-12-02 09:33:18 +08:00
@adoal (那大概是 Jython 或者别的什么
Vegetable
2021-12-02 09:40:08 +08:00
你的前提可能不太合适,我们不能假设一个语言设计出来就是为了「完美」,少了{}的 python 看起来确实更简洁,有舍有得是常态。不能直接说成重大失误。当然你不喜欢那太正常了,完全合理
luffy
2021-12-02 09:42:53 +08:00
缩进做为语法不是问题,
主要是这里是 4 个缩进。而现在流行的是 2 个缩进
zmxnv123
2021-12-02 09:47:11 +08:00
本来打了一堆话,后来想想还是全删了,不值得

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

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

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

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

© 2021 V2EX