大型 Python 开源项目都不会对变量进行类型注解? - V2EX
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
shadowmeld

大型 Python 开源项目都不会对变量进行类型注解?

  •  
  •   shadowmeld Mar 26 6390 views
    This topic created in 72 days ago, the information mentioned may be changed or developed.

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

    18 replies    2026-05-13 11:35:41 +08:00
    Muniesa
        1
    Muniesa  
       Mar 26 via Android
    函数返回值的类型注解写好了的话,一般变量就不用写了吧,我是这么理解的
    kneo
        2
    kneo  
       Mar 26 via Android
    我也没见过。class 字段,函数签名,足够了。变量的类型提示很可能是 anti-pattern 。
    shadowmeld
        3
    shadowmeld  
    OP
       Mar 26
    我从开始学 Python ,就听 AI 的建议,推荐变量都加上类型注解,而且很多博客帖子都推荐,我后面看了越来越多别人的源码,发现根本没有项目给函数内部的变量写注解,我就很困惑,这不是所谓的“推荐的,现代的、更好维护” 的写法吗?结果根本没人这样做,我感觉费时费力的写法原来没有人这样写
    blakezhaothinks
        4
    blakezhaothinks  
       Mar 26
    类型注解跟单元测试一样,除非项目一开始的时候就加上,不然后期补是很困难的。
    AV1
        5
    AV1  
       Mar 26
    一般也就函数参数要注解,变量、返回值都可以自动推导,不写影响不大。
    我写 TS 也是这样,能自动推导就自动推导。要是写得面面俱到那还不如写 java 了。
    songer
        6
    songer  
       Mar 26   2
    基本只对函数的参数和返回值做注解,然后就是大量用 dataclass / pydantic 替代 dict tuple 。用上 mypy 。基本可以了
    adoal
        7
    adoal  
       Mar 26
    因为有影响力的开源项目大多数都有不短的年份积累了。老项目没用上现代的东西很正常。

    我看过用 Python 做业务类系统开发的本地草台小公司,类型注解写得很满。
    maocat
        8
    maocat  
       Mar 26
    类型注解是 Python3.5 之后有的,刚出开,都认为不太成熟,大家都不敢用,大型项目基本都经历过 python2 的时代,一般都是在注释里解释参数,后来或多或少都很少补充类型了。可以没有,也不关键
    相对于 Type Hints ,pyproject.toml 才是大型系统升级的关键
    deplives
        9
    deplives  
       Mar 26
    现在你看到的 python 大型项目已经有很多年的代码历史了,不是有人有精力去维护这些的
    iorilu
        10
    iorilu  
       Mar 26
    老项目没空加的

    这东西可能加了没啥好处, 但会带来 bug
    Rush9999
        11
    Rush9999  
       Mar 26
    挺好奇,推荐哪几个项目啊?
    现在 numpy ,pandas 都有变量类型了,像 dify,vllm 等比较新的项目也都有。
    github 里 action 或者 pre-commit-config 里有 mypy 的项目 几乎都有变量类型 吧
    smlcgx
        12
    smlcgx  
       Mar 26 via iPhone
    这玩意应该属于不加没什么,但是错了会很麻烦的东西吧
    shadowmeld /td>
        13
    shadowmeld  
    OP
       Mar 26
    @Rush9999 都没有啊,你说的这几个我随便进去找一个 .py 里面的变量都不写类型注解的
    aloxaf
        14
    aloxaf  
       Mar 26
    仔细看了下,LZ 说的是给「变量」加类型注解,这完全没必要,舍本逐末了。

    Python 的类型注解并不强制检查,只要是内部变量 + 能自动推断出来,就没必要加。
    fibroblast
        15
    fibroblast  
       Mar 27
    2.7
    3.5
    3.6 <--- 引入的
    3.7
    3.8
    3.9 <--- 我才知道
    3.10 <--- 才变成 语法变得极其优雅,不再需要引入一堆 typing 里的东西
    现在刚 3.12
    Python 的灵魂是动态和鸭子类型( Duck Typing )

    大型项目本来就难维护
    就这
    rev1si0n
        16
    rev1si0n  
       Apr 9
    费时费力不讨好容易出问题。
    kevinn
        17
    kevinn  
       Apr 17
    连 c++ , java 都在用 auto 了,python 给变量加注解是要搞什么??
    AFlash
        18
    AFlash  
       May 13
    python 的注解不能像静态语言做类型检查,对于阅读代码,注解也只能是提示,变量命名明确也可以替代。作用有限的情况下就看个人了。
    About     Help     Advertise     Blog     API     FAQ     Solana     921 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 58ms UTC 22:39 PVG 06:39 LAX 15:39 JFK 18:39
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86