python type hint

入门

初步使用

由于python是个动态类型语言,变量是什么类型是在变量运行的时候决定的,与他人合作或者代码躲多起来之后会变得难以阅读与调试,python3.5以上引入了type hint(类型提示)

举个例子 比如有一个专门计算整型的加法函数如下

def add(a,b):return a+b
add(1,2)

光看这个add函数我们并不知道函数的参数类型和返回值类型是啥

但是使用type hint 之后

def add(a:int,b:int)->int:return a+b

这样做有几个好处

  1. 函数作者和调用者一眼能看出是什么参数类型和返回值类型

  2. 输入错误的类型之后,ide会高亮显示提醒作者输入的类型错误

如下图所示

字典

def my_sum(d: dict[str, int]) -> int:total = 0for i in d.values():total += ireturn totalmy_sum({"a": 2, "b": 3})

自定义数据类型

使用如下

class Test:name = "phil"def get_name(a: Test) -> str:return a.nameprint(get_name(Test()))

如果在get_name函数中传Test就会报错

get_name(Test)

意思是期望传一个 类型为Test的参数,现在得到一个类型为Test

解释一下:比如传一个int类型的参数为3,现在直接传的是 int

嵌套类型

这是一个求列表内元素总和的函数 在入参[1, 2, “3”]加入了个str 这样是不能求和的 但是没有任何提示

def my_sum(my_list: list)->int:sum = 0for i in my_list:sum += ireturn sumprint(sum([1, 2, "3"]))

无提示 如下图 因为只检查了最外层是list没有检查内层的每个元素

这样写就可以了

但是还是没有提示 可以安装三方库 mypy ,然后使用mypy xx.py进行静态检查

Sequence

想传list也想传tuple 可以使用Sequence 支持列表,元组,字节,range

from typing import Sequencedef my_sum(my_list: Sequence[int]) -> int:total = 0for i in my_list:total += ireturn totalmy_sum([1, 2, 3])
my_sum((1, 2, 3))
my_sum(b"123")
my_sum(range(3))

Union、Optional

如果一个参数有可能传int也有可能传None,那么可以使用union

from typing import Uniondef func(a: Union[int, None]):if a is None:return 0return afunc(None)
func(1)

也可以使用Optional是一样的效果

from typing import Optionaldef func(a: Optional[int]):if a is None:return 0return afunc(None)
func(1)

Literal

必须就得是这个样子 规定输入什么 就得输入什么

from typing import Literalclass Person:def __init__(self, name, gender: Literal["male", "female"]):self.name = nameself.gender = genderb = Person("phil", "male")
a = Person("phil", "男")

如果在实例化的时候输入 a = Person(“phil”, “男”) 就会有如下提示

NoReturn

noreturn是真的没有返回值,如报错了

from typing import NoReturndef error() -> NoReturn:raise KeyError

Any

目前默认的就是Any,什么类型都可以 如果确认返回的不是None但是没有想好返回什么类型就是用Any

from typing import Anydef fun(a) -> Any:pass

python type hint相关推荐

  1. Python Type Hint类型注解

    原文地址:https://realpython.com/python-type-checking/ 在本指南中,你将了解Python类型检查.传统上,Python解释器以灵活但隐式的方式处理类型.Py ...

  2. Python type hints 之 Optional,Union

    1,前言 type hint 在pep484加入,我个人觉得这种类似于类型约束的(机制)有点违背了python简单.简洁的初衷,在慢慢向c# java 这种强类型语言看齐的节奏. 不过好在不强制使用, ...

  3. python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...

    Python官方文档参考链接: 常规包 Python 定义了两种类型的包,常规包 和 命名空间包. 常规包是传统的包类型,它们在 Python 3.2 及之前就已存在. 常规包通常以一个包含 __in ...

  4. Python Type Hints 从入门到实践

    Python 想必大家都已经很熟悉了,甚至关于它有用或者无用的论点大家可能也已经看腻了.但是无论如何,它作为一个将加入高考科目的语言还是有它独到之处的,今天我们就再展开聊聊 Python. Pytho ...

  5. Python type 函数- Python零基础入门教程

    目录 一.type 函数简介 type 函数语法 二.type 函数实战 三.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 一.t ...

  6. Python type函数和isinstance函数区别 - Python零基础入门教程

    目录 一.Python type 函数简介 二.Python isinstance 函数简介 三.Python type 函数和 isinstance 函数区别 四.猜你喜欢 零基础 Python 学 ...

  7. [转载] python type() 判断数据类型

    参考链接: Python type() type(a).__name__ == 'dict'   :可判断a的类型是否类型为dict list tuple 这些也试用 栗子:

  8. python type函数_Python type()函数

    python type函数 Python type()函数 (Python type() Function) Python has a lot of buit-in function. The typ ...

  9. python——type hints

    python--type hints 介绍 type hints 主要是要指示函数的输入和输出的数据类型,数据类型在typing 包中,基本类型有str,list,dict等等. def hello( ...

最新文章

  1. BB陆逊高达(3Dmax)
  2. nodemanager不能正常关闭_Java虚拟机关闭钩子(Shutdown hook)
  3. Jupyter notebook 编写scala与spark
  4. boost::regex模块基于 ftp 的 regex_match 示例
  5. python测试框架nose研究_详解Python nose单元测试框架的安装与使用
  6. 微软HTTP API指南
  7. Spring.NET学习笔记13——AOP的概念(基础篇) Level 200
  8. 蓝桥杯 ALGO-34算法训练 纪念品分组(贪心算法+排序)
  9. RACCommand
  10. OpenCvSharp DnnSuperres图像超分辨率Demo测试
  11. AD画板,如何提高工作效率?
  12. 行路难PPT计算机考试,《行路难》公开课.ppt
  13. ad中那个快捷键是重复上一部_7个高手常用的快捷键,你应该收藏!
  14. 支付宝——手机网站支付接口研究
  15. 003-Xshell和Xftp连接CentOS
  16. October CMS Vs Wordpress
  17. 从屌丝到高手,三道Python编程题,九种解题算法,看看你属于哪一类
  18. 局域网共享文件夹/共享文件夹无法访问解决办法
  19. LPC1768 PWM单边沿触发
  20. C++ DLL总结—静动态调用、导出类

热门文章

  1. B+树索引(10)之回表的代价
  2. mybatis 无效的列类型: 1111
  3. Anaconda 彻底删除虚拟环境
  4. linux系统最新排名,ubuntu linux排行_linux操作系统排行
  5. 华为手表watch2鸿蒙系统,终于等到了!WATCH旗舰系列搭载鸿蒙系统,你会支持吗?...
  6. 大数据对网络运维意味着什么?
  7. 澳洲跨专业读计算机,【澳洲名校案例】跨专业申请获得澳国立计算机专业offer...
  8. Web.config配置customErrors mode为Off后依然不显示具体错误的可能原因。
  9. 学习转载:PID和PPID
  10. 从NNLM到Bert,NLP语言模型发展概述