show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次发现了类型提示(type hint)
- 这样我们就可以直接"声明"对象类型了
- 至少可以明确类型
- python某种意义上成为了静态类型的语言
- 其实只是表面的类型注释
- 什么检查都没有的
- 如果我想让他进行检查
- 怎么办呢?
- 可以让他真的做静态类型检查么?
- 建议上说要用户自觉地使用独立线下的代码检查工具
- 这个请求来自于mypy的启发
- mypy是什么
- mypy是一个可选的静态类型检查器
- 目标是进行类型检查
- 提前判断
- 没有额外开销
def get_factor_set(num: int) -> str:
s: set = {1}
for i in range(2, num + 1):
if num % i == 0:
s.add(i)
return s
def gcd(n1: int, n2: int) -> set:
s1: int = get_factor_set(n1)
s2: set = get_factor_set(n2)
gcd: set = s1.intersection(s2)
return max(gcd)
print(gcd(3600,4096))
- w|!mypy %
- 保存
- 并用外部命令mypy运行当前文件
- error配红色
- 程序很难过
- 我们一个个改
- 通过配绿色
- 做梦也会乐
- 可以把set更明确一些么?
- %s/set/set[int]/g
- 这就需要引入typing这个的module了
- 修改12行的变量名
- 让含义更明确
- 报错如下
- max要求参数是一个Iterable
- set本身就是Iterable的
- 所以这个不算错误
- 我是这样理解的
- 如果一定要一个符合要求的类型呢?
- Iterable是符合要求的类型
- Set 是 符合 Iterable 的类型
- 执行之后
- 有什么生成物么?
- 确实可以描述gcd这个模块
- 可以安装一些插件(coc-pyright)
- 让vim可以有代码提示
- 不过这个难度还是挺高的
- vim教程里面有
- 配合字体颜色
- 可以做的很花哨
- 或者报错
- 其实这些都是对原来运行结果的一种封装
- 就像人如果经常使用导航
- 对于方向的理解力会下降
- 自己踏踏实实敲代码很踏实
- 不过这些提示怎么来的呢?
- 有一些叫做pyi的文件
- 里面是python的interface
- vscode之类的现代浏览器也是用的这些
- 进行代码提示(type hint)的
-
我们这次学习了mypy
-
可以对python文件进行静态类型检查
- 说好了是int的
- 就一定是int的
- 真的认真做检查
- 不过也只是检查
-
不过遇到未知的模块调用
- 还是会执行的
- 毕竟检查和运行是两回事
- 你也不知道别人怎么用你的这个函数
- 你也不知道人家传过来什么实参
-
除了静态类型检查
- 可以让python文件更加规范一些么?🤔
-
我们下次再说👋