Python 为什么如此设计?

2022-12-19 08:04:11 +08:00
 chinesehuazhou
分享一篇文章: https://zhuanlan.zhihu.com/p/592658877



涉及 Python 语法设计、发展历史、编程思想等话题。
10887 次点击
所在节点    Python
81 条回复
chinesehuazhou
2022-12-19 18:12:05 +08:00
@cc666 很奇怪你竟会阅读理解出那样的结论。原文的逻辑:提出为什么,给出原因,我认可原因并补充更多的解读。
clueblue
2022-12-19 19:33:10 +08:00
很多 modern 编程语言都支持 UFCS, 比如 Rust, D, Nim ,a.len() 和 len(a) 语义上相同。

> pass 是 Python 独有的一种空操作,其它语言并没有这样的设计

Nim 语言也有类似的 discard 空操作;支持 discard 字符串用作注释
junkun
2022-12-19 19:48:43 +08:00
用 .len() 的话,问题是没有办法引用一个通用的函数,在一些场景不那么简洁了。
比如 map(X, list) ,对于 list 内的元素是任意类型的情况,这个里面 X 填什么?如果设计的是 .len() 的话,用类方法 str.len, list.len, dict.len 都不符合,要么就要写 lambda 了,而 GvR 本身也不是很喜欢 lambda. 而用函数的话,X 就可以直接写 len ,从这点上 len() 比 .len() 好一点。

而且缩进这个,我一直都不理解为什么网上有这么大的反感,至少我个人从来没被困扰过。无非就是复制代码的时候不能无脑粘贴?
cc666
2022-12-19 20:14:03 +08:00
@chinesehuazhou 因为你用 Python 之父的话回答了为什么 Python 的前缀更好,有种自卖自夸的意思,你所谓的自己的解读也不过是把他的话用另一个方式说一遍。换言之,我若是另一种范式的追随者,我完全可以用一样的逻辑说另一种范式更好。更别说上升到哲学的高度了。你文章里这一串解读,还不如 43 楼这样的实际理由给的直接
seakingii
2022-12-19 21:20:35 +08:00
@junkun 缩进确实是个不好的设计,浪费了人的精神花在这方面,甚至引发了空格和 TAB 的战争!
junkun
2022-12-19 21:41:48 +08:00
@seakingii 1. 别的语言就没有空格和 TAB 战争吗?而 python ,至少我用过的所有库都是用 4 个空格的,说战争也轮不到 python 。2. 我个人认为正常写代码就是应该自觉做好缩进的,无论什么语言。自动格式永远只是辅助手段。其次,我实在是不觉得代码编辑器输入缩进能费多少精神,输入完冒号回车就自动加缩进了,不需要就按一下 backspace 。
hxysnail
2022-12-19 22:13:18 +08:00
其实编程语言就是个工具,看应用场景,趁手就用,不顺手就换,哪来那么多教义,搞得跟宗教一样
charlie21
2022-12-19 22:20:29 +08:00
所以是
哪年的哪个国际期刊或
哪年的谁的的哪个论文
提及了 python 语法设计的问题
hxysnail
2022-12-19 22:28:48 +08:00
@junkun 我觉得人是最不可控的因素,如果是一个人的项目那还好说。反正我带的 Go 项目,本身自带自动格式化,但总是有人懒得配……除非大团队有精力做 code review ,否则最后肯定是一团乱糟糟的炒面
seakingii
2022-12-19 22:29:06 +08:00
@junkun 别的语言真没有 PYTHON 这么严重,TAB 和空格混用就报错.这多多少少是个问题,我不相信你没碰到过因为缩进导致运行出错,从而要调整的问题.你也不用嘴硬,自己统计下有几门语言采用强制缩进这种特性.
hxysnail
2022-12-19 22:33:07 +08:00
@seakingii 这倒是习惯就好,我一开始也感觉很烦,但写多了就觉得还好
LaTero
2022-12-19 22:45:04 +08:00
要搞前缀那最好就搞成 julia 那样,现在这样真的有点不伦不类。(而且几乎所有函数都是 data-driven 的 julia 还能比 python 快个几十倍)

@junkun Python 用的不多,但我用 GDScript 的时候真的被缩进语法烦死了。现在我都尽可能避免用缩进语法的语言写比较大的项目。
junkun
2022-12-19 22:46:40 +08:00
@seakingii 一,TAB 和空格混用报错这个,我编辑器开了 softtab ,所以不会遇到这个问题。另外,难道 TAB 和空格混用是你的 code style ?其二,是缩进导致代码出错,还是代码逻辑就写错了?还是不看代码逻辑就直接复制导致出错。最后,“真理掌握在少数人手上”这个命题,赞同的人占多数。
@hxysnail 这不是正说明了强制缩进的好处吗?不好好缩进就报错了。
LindsayZhou
2022-12-19 22:52:35 +08:00
@seakingii
现在已经在大力推空格缩进了。pep8 就规范了尽量优先用空格。
如果用 pycodestyle 或者 flake8 之类的东西做格式检查,用 tab 默认都会有 warning ,W191 。
我用 emacs 本来准备改 tab ,除了编辑器本身的设定,还有各种乱七八糟的东西全部都要改,被劝回空格了。
其他 IDE 有没有关掉这个默认配置我就不知道了。
junkun
2022-12-19 22:59:03 +08:00
@LaTero 我说的也是仅限于 Python ,Python 的语法设计是在强制缩进的平衡点上的。别的语言不一定也是这样,比如我就觉得 yaml 的缩进语法就很难堪。
seakingii
2022-12-19 23:01:24 +08:00
不是,你们为什么为明显会消耗程序员精力的特性说好话,PYTHON 本身就是作者很早以前创建的脚本语言,它有自己的优点,也存在各种问题.

比如以前没有显式的类型标注,后来不也加上了嘛,这就是在弥补不足.是不是没出这个类型标注之前,你们这些爱好者也要说:PYTHON 不需要类型标注

至于强制缩进,有点好处,会让编写者注意代码格式和段落,但我在使用过程中感觉不爽的是出错了检查费时间,特别是代码一长,真的要带个游标卡尺.经常要在服务器上 VIM 改个脚本,感觉缩进给我带来了麻烦.
seakingii
2022-12-19 23:05:09 +08:00
@junkun
哈哈,还是你好笑哦

你看看你自己写的这句话,是不是逻辑矛盾了

[最后,“真理掌握在少数人手上”这个命题,赞同的人占多数。]

“真理掌握在少数人手上” 这句是真理吗?如果是,那"赞同的人是多数"?
如果我不赞同"“真理掌握在少数人手上”",那我是掌握了真理了,还是多数人掌握了真理?

你这不是和"上帝是万能的",但"上帝能创造出一块他搬不动的石头吗?"一样的经典
seakingii
2022-12-19 23:09:56 +08:00
[TAB 和空格混用是你的 code style ?]

说实话,我写 C#,JAVA,JAVASCRIPT,GO,VB,SQL,OC,SWIFT,RUST 甚至 HTML,CSS 的时候,根本不关心是 TAB 还是空格,一般情况下 IDE 格式化一下就行了,写的时候多一空格少一 TAB 根本无所谓,不有付出精神在这方面,除了 PYTHON 和 YAML 这两货要注意...
junkun
2022-12-19 23:12:11 +08:00
@seakingii 以前就没有显式的类型标注了吗,并不是。以前的代码,类型标注会写在函数注释里。现在的这个类型标注实际上也就是一种注释。
其次,我觉得你是不是应该考虑一下是(可能未配置好的) VIM 带给你困扰,还是 python 带给你困扰。
junkun
2022-12-19 23:16:27 +08:00
@seakingii 你看不出来这是个反讽句,其表达的意思是,正确与否不在于支持的人有多少吗?

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

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

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

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

© 2021 V2EX