有没有觉得, Python 这个语言,越来越复杂(繁杂)了

2021-06-23 10:58:53 +08:00
 piqizhu8

最近一段时间,我都在研究编程语言,因为我也想创造一个编程语言, 不过我目前主要用的是 Python


在我看来,一门语言应该减少歧义,语言内要减少分裂

但我发现 Python 越来越复杂了,语法糖越来越多了, 比如:

3.9 版新增的 合并 dict 的操作符 | |=

这 2 个操作符实现的功能,dict 本身的方法就可以容易、直观的实现

增加这 2 个操作符 虽然可以少打几个字, 但是 这样不断的堆砌语法糖, 未来会让这个语言很混乱,

我个人目前没有发现这 2 个操作符带来了多大的价值,有些弊大于利

想问问大家的看法

7957 次点击
所在节点    问与答
72 条回复
kkocdko
2021-06-23 11:01:46 +08:00
我也这么觉得,再结合一下上次说要优化性能的帖子,感觉似乎有点冲突,不知道这些语法会不会成为性能优化的障碍。
我可能会更关注性能。
LokiSharp
2021-06-23 11:06:25 +08:00
Ptyhon 的语法一直很垃圾,复杂繁琐。完全和它的设计理念相悖。详见油腻的 Ptyhon ( Fluent Python )
233373
2021-06-23 11:08:02 +08:00
魔法师太多了- - 。
Jwyt
2021-06-23 11:12:36 +08:00
看别人的 python 项目比较痛苦
glfpes
2021-06-23 11:23:05 +08:00
我认为语法糖不是好的设计,简洁不在于键盘敲的少,而是设计上应该简介,相似的东西应该规约。
echo1937
2021-06-23 11:29:00 +08:00
@Jwyt #4 这个看法我是同意的,我一直也在思考,这种痛苦更多来自于动态语言的通病,还是 Python 自身的问题。

而且,Python is defined by its implementation,他没有 Specification,感觉加新特性很随意,某些时候缺少通盘考虑。
chenqh
2021-06-23 11:30:36 +08:00
我只希望 py 的速度有 nodejs 那么快
Kilerd
2021-06-23 11:39:31 +08:00
来,我们一起骂海象操作符 :=
huang119412
2021-06-23 11:41:18 +08:00
好的设计都是趋同的,go 不需要泛型,最后变真香。这样看还是 Java 好,繁琐不繁琐意义不大,又不是白板编程,毕竟现在都是智能的 ide 。
BingoXuan
2021-06-23 11:52:18 +08:00
语法糖早就已经够用了。性能不行就算了,匿名函数不够強也忍了,但加 type hints 后都几个版本了,还是类型系统还是半吊子。
lujjjh
2021-06-23 12:04:09 +08:00
https://www.python.org/dev/peps/pep-0584/#motivation
不怎么写 Python,看了 motivation 觉得没什么问题,解释了现有的方法有什么不足。Python 本来就吸收了很多函数式的东西,这个特性跟 Python 也挺搭的。

至于要不要用 | 这个运算符,Python 本来就支持运算符重载,语义上看 dict1 | dict2 也挺直观的,所以我觉得这个特性还不错,至少比 := 的争议要少多了。
keepeye
2021-06-23 12:04:52 +08:00
我用 python 写出来的代码真丑,代码多一些,ide 都要卡半天
keepeye
2021-06-23 12:05:25 +08:00
感觉 python 写的时候很爽,读的时候很糟心
WilliamYang
2021-06-23 12:25:56 +08:00
@keepeye 同感,现在再好的 Python 代码,看起来还是很丑,相比于 Go
lujjjh
2021-06-23 12:29:11 +08:00
FIY: /t/785258 刚好看见隔壁的场景适合用这个特性
hxys
2021-06-23 12:30:01 +08:00
确实,过于脚本化,过于简单有时候反而人类难看懂
wheeler
2021-06-23 12:54:27 +08:00
Zen of Python 简直就是打自己脸的。
chenqh
2021-06-23 13:51:03 +08:00
感觉还是性能不行, 别说 nodejs, 连 php8 都赶不上,过几年估计 ruby 都比 py 快了
laoyur
2021-06-23 13:59:08 +08:00
写了几层的 if,调试问题的时候想临时注释掉条件的时候,我是崩溃的,小心翼翼地选中代码块,减 tab,完了还得选中代码块,再小心翼翼地 tab 回去
对这个场景有没有啥好办法?
imn1
2021-06-23 14:10:56 +08:00
操作符的场景用在什么地方?
最大用途就是不同类型对象,要达到相似效果,但它们的方法名不相同,写函数需要检查一遍类型
如果忽略类型(只要求返回同类型)的可以不用检查

set | set -> set
dict | dict -> dict
dict.keys | dict.keys -> dict.keys

set - set -> set
dict.keys - dict.keys -> dict.keys/set
dict.items - dict.items -> dict->items

如果不清楚传入类型,要实现两者合并,set/dict 要各写一句代码,前面还要做类型检查

另外,dict 的 | 操作符,好像之前没有相同的方法
d.update()是返回 None 的,所以还要加一句 return d.copy()

我觉得 python 容易混乱的地方,是究竟方法是修改自身(返回 None ),还是返回一个新对象
不熟悉代码 /手册的人无从判断,这些问题还带到了三方模块,例如 pandas 早期就是,现在新版 pandas 逐步在理顺,统一默认返回 new object,用了 inplace=True 就修改自身
我现在很多情况都需要靠编辑器插件查看 return hint 才能确定,不然就要去翻手册了,三方包更惨

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

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

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

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

© 2021 V2EX