你们的 Python 代码加不加 Type Hints

2023-09-05 14:44:27 +08:00
 vicalloy
现在成熟一些的 Python 库都是有 Type Hints 。就我而言,新写的代码基本上都会加。加上后 IDE 可以自动补全,配合 mypy 检查出一些潜在的错误。
在我看来,在程序开始变复杂时,应当让 IDE 和编译器能尽可能的发现更多的问题。如果要用 Python 写一些复杂一些的程序,Type Hints/代码检查/单元测试都是必不可少的。
近期看到有人说“类型注解会增加看代码的心智负担”。感觉就如何注释写多了会增加心智负担一样,无法理解。再者 Python 里大多的类型其实都是可以自动推导,除了函数的输入/输出参数,要手动注明的其实并不多。

如果自己写一些小工具,自然是怎么方便怎么来,Type Hints 加不加都无所谓。如果是给其他人用的公共库,不加 Type Hints 对使用者很不友好。
7296 次点击
所在节点    Python
69 条回复
fzls
2023-09-05 19:23:40 +08:00
加,这样后面 lint 工具可以帮忙检测不少问题
vitality
2023-09-05 21:17:44 +08:00
当然要加,不然之前的代码维护起来将是灾难。
zictos
2023-09-05 21:28:06 +08:00
同一个变量进行多次赋值,习惯用同一个变量名,懒得用太多名字。
比如
a = '1'
a = int(a)
a = a + 5
a = str(a)
zlstone
2023-09-05 21:52:27 +08:00
现在看别人不加 typing 的代码,真的是太恶心了,受不了
Leviathann
2023-09-05 21:56:04 +08:00
@zictos 这叫 shadowing
molika
2023-09-05 21:59:25 +08:00
必须加。
zictos
2023-09-05 22:12:08 +08:00
@Leviathann #25 实际只会更复杂,这只是简单的例子。变量命名尽量简单,有一个基础名称就行,之后多次操作时都使用同一个名称,但中途对象和类型可能早就改变了。如果一个名称只能代表一个类型,那繁琐程度无法想象。
zictos
2023-09-05 22:50:16 +08:00
@zictos #27 补充一下,如果只是在函数参数上注明类型和返回值的类型,那还好。如果限制一个变量只能一个类型,那真的很繁琐。但是如果不完全限制变量的类型,IDE 应该还是不能比较完美地检查的吧!
LinYaXuan
2023-09-05 23:05:35 +08:00
有什么工具能检查是否有代码缺少 typing 的吗?
Trim21
2023-09-05 23:21:55 +08:00
@LinYaXuan #29 mypy no-untyped-def 设置
lanlanye
2023-09-05 23:54:06 +08:00
pylance 设置里打开显示类型推导,会在 IDE 中展示推导出的类型,实际需要添加的就很少了,看代码也方便。
Donahue
2023-09-06 00:06:05 +08:00
必须加,加了之后写代码可以享受编辑器的自动补全功能,为什么不加呢?哪怕只是一个小脚本我也加,因为自动补全太方便了
HankLu
2023-09-06 00:27:21 +08:00
肯定不加啊,这不是没事找事吗
jackmod
2023-09-06 00:30:56 +08:00
但凡需要 pip install 的项目就尽可能加,弄得像强类型语言那样。
有 pylance 这类的好用插件帮助并不需要多少精力。
pylance 给出的 warning 也要用正确的方式消掉,这期间还能发现一些隐藏 bug 。
so1n
2023-09-06 01:35:58 +08:00
尽量加
levelworm
2023-09-06 02:19:33 +08:00
能加就加。不过有些的确也蛮烦的,比如说要写成 a.b.c 这种的。
wizardyhnr
2023-09-06 06:05:31 +08:00
尽量加吧,养成习惯,Cython, Mojo 等一众语言都是依赖静态类型来加速的,养成语法习惯以后用这些进一步优化性能就很顺,不属于沉没成本
NoAnyLove
2023-09-06 06:47:10 +08:00
个人觉得没有 type hints 的代码才是难以阅读。“增加心智”负担是什么鬼?这是谁的观点啊?加 type hints 影响他 san 值了?加多了要克苏鲁化?
bianhui
2023-09-06 08:06:24 +08:00
尽量不加,如果加了那你比别人价值高在哪?让项目离开自己难以维护,从而在公司站住脚。
jjx
2023-09-06 08:16:44 +08:00
看你应用模式
企业 crud , 数据类型主要来自 db , 字符串是主要形式, 个人认为加不加没有实在意义

其次是这语言本身, 类型是属于后加上去的,怎么用都不怎么舒服


真要这样, 不如直接用静态语言

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

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

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

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

© 2021 V2EX