Python 的类型检查

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


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

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

除非你用 pydantic
aisk
2023-09-28 17:14:38 +08:00
@xzm429438709 就算没有 ts 的好,也不至于像贴主说的那样,拿到变量不知道什么类型。
qq565425677
2023-09-28 17:56:07 +08:00
python 的好处恰恰在于不需要知道类型也能写
vituralfuture
2023-09-28 18:36:57 +08:00
我觉得 python 的 typehint 用好了效果不输 TS ,主要是以前的第三方库开发的时候 typehint 还不流行或者甚至没提出,比如 Django 对 url 做校验还需要把类型写到字符串里,然而 fastapi 已经可以利用 typehint 做校验了
vituralfuture
2023-09-28 18:41:12 +08:00
而且 python 对 typehint 的支持是渐进的,也就是说一个第三方库,可以完全不使用 typehint ,也可以部分类或函数使用 typehint ,也可以完全不使用 typehint ,使用起来体验割裂。比如 opencv 安装了 stub 后,也存在类型推导无法生效的情况
junkun
2023-09-29 14:00:12 +08:00
@LindsayZhou 动态语言 print(dir(X)) 就好了啊,或者 breakpoint()。最近读到一句话很是认同:类型是给机器看的。就算有类型标注还是得看文档,写 java 都是这样。

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

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

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

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

© 2021 V2EX