Python类型系统的一点实践
Contents
一切都是从PEP484开始的
1 | def greeting(name: str) -> str: |
使用一种类似golang类型标注的方式来标注类型.
Python3中的Type Hints
在Python3
中, 可以参考如下的形式:
类方法
1 | # File models/a.py |
不需要为self
变量标注, 而且有一点就是, 你可以使用一个字符串'b.B'
来表示.
赋值 && 多变量赋值
1 | x = [] # type: List[Employee] |
For循环与With语句
1 | with frobnicate() as foo: # type: int |
Python2的项目怎么使用?
其实写这篇博客的一大部分都是为了说明Python2中的类型说明的可行性, 因为我接手的项目都是Python2, 对Python3中的Type语法是不支持的, 但是又想使用 确定类型的写法, 官方文档也在此处做了说明.
1 | def embezzle(self, account, funds=1000000, *fake_receipts): |
将函数变量中的类型放在doc之前, 再加入# type:
, 就会自动识别为类型说明了,
对于赋值以及循环语句, 可以参考Python3的做法.
Type Hints到底带来了什么
更强大的代码补全, 无论你是VSCode还是Vim用户, Python的代码补全提示是想当的 弱. 但当你加上了类型之后. 大大缓解了
jedi
的工作量, 你会发现, 即使是Vim 的代码提示, 也想当的实用.我想, 大部分人一定也认为强类型语言的程序相较于弱类型语言好维护, 其中的两个原因 就是: 1. 编译期报错, 2. 类型确定.
代码大全里有这么一段话:
真实世界混乱不堪并不等于你的代码也得同样糟糕. 将你的系统看做理想世界, 混乱的真实世界, 以及从前者到后者的接口的结合.
如果你十分喜欢Python的弱类型, 我认为是在与真实世界交互的位置使用, 用来包容这个
混乱的世界. 而在你自己创造的理想的世界中, 不应该存在有类型不确定的对象,
请对自己的世界有足够多的control
.
请把类型补上!!!
无论你是不是后端程序员, 在使用Python
的时候, 请把类型标注一下. 就当是为了
我们这些贫苦大众, 让我们认识一个新的变量从看到他的类型开始, 好吗?