Skip to content

Latest commit

 

History

History
171 lines (117 loc) · 4.03 KB

239-548429-[专业选修]静态类型检查_mypy.sy.md

File metadata and controls

171 lines (117 loc) · 4.03 KB
show version enable_checker
step
1.0
true

类型提示(type hint)

回忆

  • 上次发现了类型提示(type hint)
  • 这样我们就可以直接"声明"对象类型了
  • 至少可以明确类型
  • python某种意义上成为了静态类型的语言
  • 其实只是表面的类型注释
  • 什么检查都没有的
  • 如果我想让他进行检查
  • 怎么办呢?
  • 可以让他真的做静态类型检查么?

查看文档

图片描述

  • 建议上说要用户自觉地使用独立线下的代码检查工具
  • 这个请求来自于mypy的启发
  • 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文件更加规范一些么?🤔
  • 我们下次再说👋