很奇怪啊,我问 AI 的话,它总是说给变量加类型注解更好,说什么现代 Python 大型项目都这样做,Python 官方也推荐,但是我让它推荐几个项目,我去看源码,没有任何一个开源项目对变量写了类型注解,而且 AI 的代码也不会有对变量的类型注解。但实际上根本没有任何项目这样做,至少我找不到。

很奇怪啊,我问 AI 的话,它总是说给变量加类型注解更好,说什么现代 Python 大型项目都这样做,Python 官方也推荐,但是我让它推荐几个项目,我去看源码,没有任何一个开源项目对变量写了类型注解,而且 AI 的代码也不会有对变量的类型注解。但实际上根本没有任何项目这样做,至少我找不到。
1 Muniesa Mar 26 via Android 函数返回值的类型注解写好了的话,一般变量就不用写了吧,我是这么理解的 |
2 kneo Mar 26 via Android 我也没见过。class 字段,函数签名,足够了。变量的类型提示很可能是 anti-pattern 。 |
3 shadowmeld OP 我从开始学 Python ,就听 AI 的建议,推荐变量都加上类型注解,而且很多博客帖子都推荐,我后面看了越来越多别人的源码,发现根本没有项目给函数内部的变量写注解,我就很困惑,这不是所谓的“推荐的,现代的、更好维护” 的写法吗?结果根本没人这样做,我感觉费时费力的写法原来没有人这样写 |
4 blakezhaothinks Mar 26 类型注解跟单元测试一样,除非项目一开始的时候就加上,不然后期补是很困难的。 |
5 AV1 Mar 26 一般也就函数参数要注解,变量、返回值都可以自动推导,不写影响不大。 我写 TS 也是这样,能自动推导就自动推导。要是写得面面俱到那还不如写 java 了。 |
6 songer Mar 26 基本只对函数的参数和返回值做注解,然后就是大量用 dataclass / pydantic 替代 dict tuple 。用上 mypy 。基本可以了 |
7 adoal Mar 26 因为有影响力的开源项目大多数都有不短的年份积累了。老项目没用上现代的东西很正常。 我看过用 Python 做业务类系统开发的本地草台小公司,类型注解写得很满。 |
8 maocat Mar 26 类型注解是 Python3.5 之后有的,刚出开,都认为不太成熟,大家都不敢用,大型项目基本都经历过 python2 的时代,一般都是在注释里解释参数,后来或多或少都很少补充类型了。可以没有,也不关键 相对于 Type Hints ,pyproject.toml 才是大型系统升级的关键 |
9 deplives Mar 26 现在你看到的 python 大型项目已经有很多年的代码历史了,不是有人有精力去维护这些的 |
10 iorilu Mar 26 老项目没空加的 这东西可能加了没啥好处, 但会带来 bug |
11 Rush9999 Mar 26 挺好奇,推荐哪几个项目啊? 现在 numpy ,pandas 都有变量类型了,像 dify,vllm 等比较新的项目也都有。 github 里 action 或者 pre-commit-config 里有 mypy 的项目 几乎都有变量类型 吧 |
12 smlcgx Mar 26 via iPhone 这玩意应该属于不加没什么,但是错了会很麻烦的东西吧 |
| /td> | 13 shadowmeld OP @Rush9999 都没有啊,你说的这几个我随便进去找一个 .py 里面的变量都不写类型注解的 |
14 aloxaf Mar 26 仔细看了下,LZ 说的是给「变量」加类型注解,这完全没必要,舍本逐末了。 Python 的类型注解并不强制检查,只要是内部变量 + 能自动推断出来,就没必要加。 |
15 fibroblast Mar 27 2.7 3.5 3.6 <--- 引入的 3.7 3.8 3.9 <--- 我才知道 3.10 <--- 才变成 语法变得极其优雅,不再需要引入一堆 typing 里的东西 现在刚 3.12 Python 的灵魂是动态和鸭子类型( Duck Typing ) 大型项目本来就难维护 就这 |
16 rev1si0n Apr 9 费时费力不讨好容易出问题。 |
17 kevinn Apr 17 连 c++ , java 都在用 auto 了,python 给变量加注解是要搞什么?? |
18 AFlash May 13 python 的注解不能像静态语言做类型检查,对于阅读代码,注解也只能是提示,变量命名明确也可以替代。作用有限的情况下就看个人了。 |