你们的 Python 代码加不加 Type Hints

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

如果自己写一些小工具,自然是怎么方便怎么来,Type Hints 加不加都无所谓。如果是给其他人用的公共库,不加 Type Hints 对使用者很不友好。
6087 次点击
所在节点    Python
69 条回复
TuringGunner
246 天前
反正我现在写代码习惯性的就加上了
hsfzxjy
246 天前


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

https://peps.python.org/pep-0695/
inhzus
246 天前
加,自己写的代码自己爽
NoOneNoBody
246 天前
我这种隔夜忘,不单写 type hints ,还写 __doc__
除非函数很简单,一眼就知道类型和它做什么

对我来说,离不开 pyright 了
BBCCBB
246 天前
不加等后面维护时看代码恼火
julyclyde
246 天前
我后来特地整改过一轮,加上了
不过我发现有些似乎不太好写,比如我的函数会 yield 一堆结果出来

之前还特地查过,现在又忘了怎么表达 yield 了
yunyuyuan
246 天前
写,但是体验完全比不上 Typescript ,Generic 总是用不明白
alexsz
246 天前
以前不写,现在开始写了
yunyuyuan
246 天前
@hsfzxjy 这个不错
lambdaq
246 天前
出参入参看心情加一下。别的不加。
DOLLOR
246 天前
我写 python 基本上都加 type hints 了。
甚至写 js 都要加 jsdoc + ts-check 。
craiiz
246 天前
加了真的很爽
pengtdyd
246 天前
python 如果加了 type hints 那还是 python 吗?那不成 java 了
XueXianqi
246 天前
加,都加,入参出参的 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
246 天前
@pengtdyd
Python 代码加上 Type Hints ,看起来虽然没有那么 Pythonic 了,虽然更加费时了,但是可读性、可维护性大大增强了,在我看来,还是很有必要的
cmdOptionKana
246 天前
加过,还是比较麻烦,小项目没必要。
LitterGopher
246 天前
新代码都是基本加上的,旧代码啥时候改到那个地方再改。

没有处于可维护性,可读性这一类高大的原因,而是很简单的加上之后 IDE 提示更加友善。
fcfangcc
246 天前
wzw
246 天前
小东西随便了, 要是是项目一定要加, 重要的我就上 Golang
asmoker
246 天前
不写,我写 Python 就是指为了省事儿,自然语言似的,文思如尿崩,要是写 type hints 还不如用 go

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

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

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

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

© 2021 V2EX