知乎上有个几年前的问题,那时候不用 type hint 的原因主要有以下几点:
2020 年的今天,上述的有些问题应该已经没了,剩下的问题是不是依然阻碍使用 type hint 呢?
1
Vegetable 2020-05-09 11:10:41 +08:00 1
用了,IDE 支持已经不错了,所以其他缺点都不算缺点了。
最近在学习 Fastapi 和 pydantic,很惊艳。 冷暖自知吧,我个人感觉很好。 |
2
xiaolinjia 2020-05-09 11:23:47 +08:00
用了,挺好的。
|
3
LokiSharp 2020-05-09 11:29:30 +08:00
不用,这个特性目前依旧是个高级的注释,运行时没有啥实际作用,我写 Python 就是为了少敲点类型,真需要静态类型的干嘛不换个语言
更好的 IDE 支持?我写 Python 很多时候就是因为写脚本用编辑器直接敲起来方便,项目复杂度真到到非用 IDE 不可的时候,用 Java C# 之类的工程化的语言不是更香么 |
4
xiaolinjia 2020-05-09 11:44:28 +08:00 2
我感觉看场景,ls 说的只适用于单人开发场景,或者说把场景固定死了在单人小应用(脚本就是其中一种)中使用 py 。我觉得 type hint 在多人协作中就很有用,因为动态类型看着累,并且代码还不都是自己写的。直接配合 ide 提醒就很舒服。不支持 py2 是真的,不过 2 都退休了就算了(虽然我公司的一些项目还在 2,我巴不得 2 也能上)。
|
5
ZSeptember 2020-05-09 11:48:08 +08:00
大型项目可以用
我一般用 Go 和 Java,用 Python 就是为了不写类型的,就不用了。 |
6
xpresslink 2020-05-09 12:04:59 +08:00
python 比较适合做大量尝试性的开发项目,还有就是一次性的任务,比如爬虫。还有开发工具类的项目,比如运维工具系统的 web 界面之类,还有一些系统和管理后台等。这类项目基本上就是自己一个人玩的项目,写不写注释无所谓。
|
7
LokiSharp 2020-05-09 12:05:33 +08:00
@xiaolinjia #4 然而多人场景用真静态类型的语言你会更舒服,性能还比 Python 好一个数量级
|
8
dayeye2006199 2020-05-09 12:12:59 +08:00
可以上 pyre 和 mypy,自动加上类型注释和做类型检查。
个人脚本可以不加。但多人协作加上这个会对大家心智负担减轻很多。 Instagram 内部是强制 pyre 检查的,不过不让 commit 的。 |
9
di94sh 2020-05-09 12:15:54 +08:00 via iPhone 2
当你一直要处理复杂数据结构的时候,你就是到 type hint 多香了。dict 传来传去到最后自己都不知道里面是啥
|
10
JJstyle 2020-05-09 12:19:53 +08:00 via iPhone
说实话,写这玩意很累
|
11
Liyiw 2020-05-09 12:25:26 +08:00
我感觉你说的前 4 点不会因为是 2020 的今天就没了吧
这些问题不是一直存在的吗 莫非 python 把 type hinting 的语法改了? |
12
so1n 2020-05-09 12:31:04 +08:00 via Android
用了,除了工程化外解析程序和 api 接口类型检验时也很好用
|
13
jjx 2020-05-09 12:53:51 +08:00
还停留在 python 2
|
14
Mohanson 2020-05-09 13:01:06 +08:00
python 许多标准库都加上 hint 了, 有什么理由不用呢...
|
15
009694 2020-05-09 13:25:41 +08:00 1
用 而且用的很多。 就我平常用的最多的 matplotlib 来说 pycahrm 对 axes 的提示几乎没有 都靠记忆太累了,加上 type hint 之后 所有提示都有了,整体心智负担指数级下降
|
16
jsq2627 2020-05-09 13:46:07 +08:00
|
17
pakro888 2020-05-09 13:53:19 +08:00
好用,尤其是过一段时间再看项目,很有帮助
|
18
locoz 2020-05-09 13:59:59 +08:00
用,写习惯了 Golang 之后写 Python 的时候加类型注解完全就是顺手而为,毫无麻烦感😂
|
19
paoqi2048 2020-05-09 14:03:25 +08:00
准备试试
|
20
yhxx 2020-05-09 14:04:05 +08:00
有种在说 typescript 的感觉
其实我也一直觉得要是想要静态类型我换个语言就是了,用 python 就是不想写类型啊 |
21
niubee1 2020-05-09 14:06:31 +08:00
有个很扯的问题,我要返回类本身的时候,会报错,那么就是说我不能定义链式调用咯,太扯了
|
22
TransAM 2020-05-09 14:08:20 +08:00 via Android
类型标注只支持类,不支持协议。比如 list 协议和 list 类是不一样的,标成 list 类就会频繁崩溃。
|
23
cominghome 2020-05-09 14:20:01 +08:00
试用过一段时间,感觉就是个高级注释,对我来说没啥用。。。
|
27
rockyou12 2020-05-09 16:05:30 +08:00
对我这样的 java 写了好多年,才开始学 python 的很有用。特别是看课程给的代码,我都要自己给加上类型再写一遍,不然真的记不住有些什么 api……
|
28
Drahcir 2020-05-09 16:52:45 +08:00
准备开始规范化使用类型标注。
是一个代码风格的问题,开始会觉得挺麻烦,但熟悉以后对代码质量有很大帮助。 当然还有规范化注释也很重要。 |
29
wzw 2020-05-09 17:52:55 +08:00 via iPhone
我直接转 go 了
|
31
scorn 2020-05-09 17:54:53 +08:00
我都用 python 还写个什么静态类型
|
32
fox0001 2020-05-09 17:56:43 +08:00 via Android
我拥抱 go[狗头]
|
33
lights 2020-05-09 18:08:22 +08:00
弱类型一时爽,重构火葬场
|
34
superrichman 2020-05-09 18:12:13 +08:00 via iPhone
没有,不如一句注释来的直观。
都用 python 了,不想搞静态语言那套东西 |
35
zhustec 2020-05-09 18:13:00 +08:00
一直没搞懂指向自身类型该怎么写
```python class Node: value: int prev: ?? next: ?? ``` |
36
labulaka521 2020-05-09 18:34:51 +08:00 via Android
拥抱不了转 go 了
|
37
BaseVariable 2020-05-09 18:43:23 +08:00
@dayeye2006199 老哥,好像 pyre 和 mypy 是做类型检查的吧,哪个可以自动加类型注释呢?
|
38
no1xsyzy 2020-05-09 18:51:33 +08:00
dataclass + dacite 写舒服了
其他地方不用,但碰到 JSON API 要解析只用注解来解析。 |
39
no1xsyzy 2020-05-09 18:52:46 +08:00
@zhustec #35
class Node: value: int prev: 'Node' next: 'Node' 确实很诡异,注解里写上字符串是 Forward Reference 要字符串本身的话需要 Literal['Node'] 这样(>=3.8 ) |
41
no1xsyzy 2020-05-09 19:01:40 +08:00
@zhustec #40 不能同意更多,写着写着突然说未定义,意识到需要加引号,也是心智负担。
所以我拿注解只用来解析 JSON API,写完 dataclass 以后 dacite.from_dict(SomeDataClass, some_dict) 就能把它变成一个 dataclass,支持 List Optional Union 等一众 typing 辅助项。 |
42
reedthink 2020-05-09 19:11:23 +08:00
方向错了
|
43
hspeed18 2020-05-09 19:16:45 +08:00
要 type hint 为什么不直接用静态语言
|
44
levelworm 2020-05-10 04:05:30 +08:00 via Android
一直在用,主要是给自己看,不然过一阵子未必回忆的起来。
|
45
skinny 2020-05-10 08:13:36 +08:00
有的代码用,觉得非常非常丑 + 麻烦,而且很多功能 docstring 也可以解决,更精简。至于 IDE 支持,我就遇到过连 PyCharm 都根本不识别的情况(比如 ThreadPoolExecutor ),现在好像已经修复了。
有的类型你一写容易变得非常长,加上名字还不能短,名字短有的你会忘记到底是干什么的,跟没有一样,也不是非常复杂的数据结构,就字典这种,虽然你可以单独在一行构建类型,后面使用,但是一层层套下来也是不够直观的,而且很多时候一个参数一行都很长,类型就占了大半,还多半用处不大,而且你用 PyCharm 看还是得各种跳转。即便你写了类型,很多时候依然要做运行时检查,比如类似于 reuquests.get 的 params 这种参数。 写着写着你会觉得代价太高收益太低,也不是什么大项目,有这需求干嘛不换一个语言,大部分工作人家编译期间就做完了。 |