Skip to content

Latest commit

 

History

History
126 lines (90 loc) · 2.87 KB

File metadata and controls

126 lines (90 loc) · 2.87 KB
Error in user YAML: (<unknown>): found a tab character that violate indentation while scanning a plain scalar at line 3 column 3
---
- oeasy Python 0248
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
- 本教程同步发布在: 
	- 个人网站: `https://oeasy.org` 
	- 蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
	- GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
	- Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

类型提示(type hint)

回忆

  • 上次我们研究了最大公约数
    • gcd(greatest common divisor)
    • 这次合起来的优势比上次还明显
    • 而且大数字的时候效率高得多
  • 限于动态语言的缘故
    • 实参的类型是不确定的
      • 可以是整型
      • 也可以是字符串
    • 如果要进行类型转化又有额外的开销
    • 而且还要加上字符try...exception...
  • 这两难的局面如何破解呢?

类型提示(type hint)

  • PEP484
    • Python Enhancement Proposals

图片描述

  • 观察最后2行
    • 语法看起来挺简单
  • 我们去试试

重写

图片描述

  • 函数运行没有问题
  • 局部变量可以声明类型么?

图片描述

局部变量

def get_factor_set(num: int) -> set:
    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: set = get_factor_set(n1)
    s2: set = get_factor_set(n2)
    gcd: set = s1.intersection(s2)
    return max(gcd)

print(gcd(3600,4096))
  • 看起来确实是可以声明类型的

  • 我们可以声明

    • num: int = 5
  • 而不是

    • i_int = 5
  • 不过如果我们把int改成str也没事

    • 这些只是类型提示
    • 并不影响编译运行
  • 这个类型还有什么讲究么?

自定义类型

图片描述

  • 类型名首字母大写
  • 类型名用的是大驼峰

图片描述

层层深入

图片描述

  • 可以有一些基于基本类型的复合类型

可调用

  • 函数也可以做实参
  • 可以声明究竟是什么样的函数么?

图片描述

  • 需要明确函数三要素
    • 函数名
    • 参数列表
    • 返回值类型

总结

  • 这次发现了类型提示(type hint)
    • 这样我们就可以直接"声明"对象类型了
    • 至少可以明确类型
    • python某种意义上成为了静态类型的语言

图片描述

  • 其实只是表面的类型注释
    • 并不能限制变量的类型
    • 什么检查都没有的
    • 如果我想让他进行检查限制
  • 怎么办呢?🤔
  • 我们下次再说👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。