你们的 Python 代码加不加 Type Hints

2023-09-05 14:44:27 +08:00
 vicalloy
现在成熟一些的 Python 库都是有 Type Hints 。就我而言,新写的代码基本上都会加。加上后 IDE 可以自动补全,配合 mypy 检查出一些潜在的错误。
在我看来,在程序开始变复杂时,应当让 IDE 和编译器能尽可能的发现更多的问题。如果要用 Python 写一些复杂一些的程序,Type Hints/代码检查/单元测试都是必不可少的。
近期看到有人说“类型注解会增加看代码的心智负担”。感觉就如何注释写多了会增加心智负担一样,无法理解。再者 Python 里大多的类型其实都是可以自动推导,除了函数的输入/输出参数,要手动注明的其实并不多。

如果自己写一些小工具,自然是怎么方便怎么来,Type Hints 加不加都无所谓。如果是给其他人用的公共库,不加 Type Hints 对使用者很不友好。
7237 次点击
所在节点    Python
69 条回复
TuringGunner
2023-09-05 14:46:28 +08:00
反正我现在写代码习惯性的就加上了
hsfzxjy
2023-09-05 14:48:38 +08:00


p.s. python 3.12 即将引入的 PEP 695 会让 type hint 的写法更加方便

https://peps.python.org/pep-0695/
inhzus
2023-09-05 14:57:47 +08:00
加,自己写的代码自己爽
NoOneNoBody
2023-09-05 15:06:21 +08:00
我这种隔夜忘,不单写 type hints ,还写 __doc__
除非函数很简单,一眼就知道类型和它做什么

对我来说,离不开 pyright 了
BBCCBB
2023-09-05 15:09:58 +08:00
不加等后面维护时看代码恼火
julyclyde
2023-09-05 15:10:25 +08:00
我后来特地整改过一轮,加上了
不过我发现有些似乎不太好写,比如我的函数会 yield 一堆结果出来

之前还特地查过,现在又忘了怎么表达 yield 了
yunyuyuan
2023-09-05 15:33:13 +08:00
写,但是体验完全比不上 Typescript ,Generic 总是用不明白
alexsz
2023-09-05 15:34:26 +08:00
以前不写,现在开始写了
yunyuyuan
2023-09-05 15:34:35 +08:00
@hsfzxjy 这个不错
lambdaq
2023-09-05 15:38:26 +08:00
出参入参看心情加一下。别的不加。
DOLLOR
2023-09-05 15:44:53 +08:00
我写 python 基本上都加 type hints 了。
甚至写 js 都要加 jsdoc + ts-check 。
craiiz
2023-09-05 17:10:18 +08:00
加了真的很爽
pengtdyd
2023-09-05 17:11:34 +08:00
python 如果加了 type hints 那还是 python 吗?那不成 java 了
XueXianqi
2023-09-05 17:15:20 +08:00
加,都加,入参出参的 Type Hints 、doc-string 、Demo 都加上

举个栗子:

```python
from decimal import Decimal
from typing import Union

DOT: str = "."
ERROR_TIP: str = "numbers 元素必须为数字类型"


def x_round(
num: Union[int, float, Decimal],
bit: int = 2,
) -> Decimal:
"""
提高精度的四舍五入

>>> round(num=1.115) # no
1.11

>>> round(num=1.125) # yes
1.13

>>> x_round(num=1.115) # yes
1.12

>>> x_round(num=1.125) # yes
1.13

:param num: 需要四舍五入(严格意义上,是:四舍六入五成双)的数字
:param bit: 精确到小数点后几位
:return: 四舍五入后的数字
:raise ValueError: bit 必须大于等于 0
"""

if bit < 0:
raise ValueError("bit 必须大于等于 0")

_times: int = 10 ** bit # 倍数(功能等同于保留几位小数)

rough_num: float = round(num * _times) / _times

return Decimal(str(rough_num))
```
XueXianqi
2023-09-05 17:18:37 +08:00
@pengtdyd
Python 代码加上 Type Hints ,看起来虽然没有那么 Pythonic 了,虽然更加费时了,但是可读性、可维护性大大增强了,在我看来,还是很有必要的
cmdOptionKana
2023-09-05 17:30:16 +08:00
加过,还是比较麻烦,小项目没必要。
LitterGopher
2023-09-05 17:38:27 +08:00
新代码都是基本加上的,旧代码啥时候改到那个地方再改。

没有处于可维护性,可读性这一类高大的原因,而是很简单的加上之后 IDE 提示更加友善。
fcfangcc
2023-09-05 17:43:56 +08:00
wzw
2023-09-05 18:48:58 +08:00
小东西随便了, 要是是项目一定要加, 重要的我就上 Golang
asmoker
2023-09-05 19:23:27 +08:00
不写,我写 Python 就是指为了省事儿,自然语言似的,文思如尿崩,要是写 type hints 还不如用 go

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

https://ex.noerr.eu.org/t/971095

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

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

© 2021 V2EX