V2EX = way to explore
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
xzm429438709
V2EX  ›  Python

Python 的类型检查

  •  
  •   xzm429438709 · 2023-09-28 11:14:20 +08:00 via Android · 2107 次点击
    这是一个创建于 451 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Python 的 typehint 很感觉不行啊,用起来很慌,特别是 Django ,很多时候不知道变量什么类型,能不能出一个类似 typescript 这种,真的 TS 给前端续上了好几年命
    18 条回复    2023-09-29 14:00:12 +08:00
    crackidz
        1
    crackidz  
       2023-09-28 11:15:37 +08:00
    使用 pylance 会有类型推导,另外 stubs 有的尽量装上
    noe132
        2
    noe132  
       2023-09-28 11:24:19 +08:00
    python typehint 给我的感觉就像是以前的 jsdoc ,不能说没有,但也不能说非常有用。
    typescript 直接把 js 拉到和静态类型语言快一个水平了
    Hstar
        3
    Hstar  
       2023-09-28 12:08:14 +08:00
    python 的 typehint 只是标注,ide 帮你检查,解释器完全无视这些玩意。
    既然用动态语言了,就抛弃你的类型依赖观念,一把嗦~
    deorth
        4
    deorth  
       2023-09-28 12:11:34 +08:00 via Android
    typthon
    不如还是直接转 go 吧
    dayeye2006199
        5
    dayeye2006199  
       2023-09-28 12:13:22 +08:00
    可以弄个 git 的钩子,挂个 mypy 之类的类型检查器。把 django 的 stub 装上
    cdwyd
        6
    cdwyd  
       2023-09-28 12:14:21 +08:00 via Android
    一直不明白写 python 为什么会有类型依赖呢?
    大部分情况都能根据经验推测出来类型,推测不出来的找到定义的地方看一眼也不费事
    LindsayZhou
        7
    LindsayZhou  
       2023-09-28 12:27:46 +08:00
    pytest 的时候走 mypy 过一遍呗。


    @cdwyd #6
    我主要是用第三方库的时候。
    如果他们写了类型,不用去读他们的代码,lsp 会有更友好的提示。
    特别是用了自定义类的时候,不用去翻代码和文档查有哪些方法可以用。
    cdwyd
        8
    cdwyd  
       2023-09-28 12:40:19 +08:00 via Android
    @LindsayZhou 明白了,主要适用于调用了第三方类库,然后只是简单使用下不太值花时间得去了解熟悉具体用法的情况。
    aisk
        9
    aisk  
       2023-09-28 13:19:21 +08:00
    Python 不是很早就内置了 JS 想要但是还没加进去的类型标注功能,并且有官方的 mypy 以及微软的 pyright 来做类似 typescript 工具做的工作,题主还想要什么呢?
    bianhui
        10
    bianhui  
       2023-09-28 13:41:56 +08:00
    一个好的变量命名足以知道参数是啥类型
    jianyang
        11
    jianyang  
       2023-09-28 13:42:31 +08:00
    养成做类型标准的习惯
    变量 :type
    函数 ->type

    我现在写 GO 写习惯了,偶尔用 python 写一些简单的脚本的时候都感觉非常别扭
    xzm429438709
        12
    xzm429438709  
    OP
       2023-09-28 14:41:27 +08:00 via Android
    @aisk mypy 你用起来就知道了,typedict 很多没有 ts 的好
    woodfizky
        13
    woodfizky  
       2023-09-28 15:03:19 +08:00
    类型注解是类型注解,类型检查是类型检查

    除非你用 pydantic
    aisk
        14
    aisk  
       2023-09-28 17:14:38 +08:00
    @xzm429438709 就算没有 ts 的好,也不至于像贴主说的那样,拿到变量不知道什么类型。
    qq565425677
        15
    qq565425677  
       2023-09-28 17:56:07 +08:00
    python 的好处恰恰在于不需要知道类型也能写
    vituralfuture
        16
    vituralfuture  
       2023-09-28 18:36:57 +08:00 via Android
    我觉得 python 的 typehint 用好了效果不输 TS ,主要是以前的第三方库开发的时候 typehint 还不流行或者甚至没提出,比如 Django 对 url 做校验还需要把类型写到字符串里,然而 fastapi 已经可以利用 typehint 做校验了
    vituralfuture
        17
    vituralfuture  
       2023-09-28 18:41:12 +08:00 via Android
    而且 python 对 typehint 的支持是渐进的,也就是说一个第三方库,可以完全不使用 typehint ,也可以部分类或函数使用 typehint ,也可以完全不使用 typehint ,使用起来体验割裂。比如 opencv 安装了 stub 后,也存在类型推导无法生效的情况
    junkun
        18
    junkun  
       2023-09-29 14:00:12 +08:00
    @LindsayZhou 动态语言 print(dir(X)) 就好了啊,或者 breakpoint()。最近读到一句话很是认同:类型是给机器看的。就算有类型标注还是得看文档,写 java 都是这样。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2785 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.