python使用typing模块加强代码的可读性(实战演示)

一、需求描述

没有类型提示的编程,总觉得不太方便,好在python3.5以后内置了typing模块。

typing模块会对函数和变量类型进行注解。

但是Python 运行时不强制执行函数和变量类型注解,但这些注解可用于类型检查器、IDE、静态检查器等第三方工具。

官方网址:

typing --- 类型提示支持 — Python 3.10.1 文档

https://docs.python.org/zh-cn/3/library/typing.html

二、实战演练

1、体验注解功能

如下所示,定义变量类型而不赋值,那么在赋值的时候就会有相应的提示,但运行不报错

from typing import AbstractSet
from typing import Dict
from typing import Generator
from typing import List
from typing import Mapping
from typing import Optional
from typing import Tuple
from typing import TypeVar
from typing import Union

list_001:List[int]
list_001 = 123

 2、List和Dict的使用

# List的使用
def test_List(num: int) -> List[int]:
    return [num, bool(num), str(num)]  # 只要有一个符合指定类型,就不会给出提示信息

# Dict的使用
def test_Dict(num: int) -> Dict[str,int]:  #
    return {"num": "num", 1: "str(num)", "str(num)": 1}  # 只要有一个符合指定类型,就不会给出提示信息
    # return {1: 3}  # 如果是key是1,则会出现提示key应该是str
    # return {"1":3}

print(test_Dict(5))

 3、Union的使用

# List的使用
def test_List(num: int) -> [int or str or bool]:
    return [num, bool(num), str(num)]  # 只要有一个符合指定类型,就不会给出提示信息

# Dict和Union的使用
def test_Dict(num: int) -> Dict[str,Union[int, str, bool]]:  #
    return {"num": "num", 1: "str(num)", "str(num)": 1}  # 只要有一个符合指定类型,就不会给出提示信息
    # return {1: 3}  # 如果是key是1,则会出现提示key应该是str
    # return {"1":3}
print(test_List(1))
print(test_Dict(5))

4、Optional的使用

这个参数可以为空或已经声明的类型,即 Optional[X] 等价于 Union[X, None] 

# Dict和Optional的使用
def test_Dict(num: int) -> Dict[str,Optional[str]]:  #
    return {"num": "num", 1: "str(num)", "str(num)": 1}  # 只要有一个符合指定类型,就不会给出提示信息
    # return {1: 3}  # 如果是key是1,则会出现提示key应该是str
    # return {"1":3}

def test_Dict01(num: int) -> Dict[str,Optional[int]]:  #
    return {"1":None}

5、Tuple的使用

与列表一致,元组泛型要求每个位置的类型要一一对应

# Optional的使用
def test_Dict(num: int) -> Dict[int,Tuple[int,int]]:  #
    return {1:(1,2)}
    # return {1:(1)}  # 非一一对应的时候会给出提示

到此这篇关于python:使用typing模块加强代码的可读性的文章就介绍到这了,更多相关python typing模块加强代码内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python标准库之typing的用法(类型标注)

    PEP 3107引入了功能注释的语法,PEP 484 加入了类型检查 标准库 typing 为类型提示指定的运行时提供支持. 示例: def f(a: str, b:int) -> str: return a * b 如果实参不是预期的类型: 但是,Python运行时不强制执行函数和变量类型注释.使用类型检查器,IDE,lint等才能帮助代码进行强制类型检查. 使用NewType 创建类型 NewType() 是一个辅助函数,用于向类型检查器指示不同的类型,在运行时,它返回一个函数,该函数返回其

  • Python-typing: 类型标注与支持 Any类型详解

    Any docs Any 是一种特殊的类型. 静态类型检查器将所有类型视为与 Any 兼容,反之亦然, Any 也与所有类型相兼容. 这意味着可对类型为 Any 的值执行任何操作或方法调用,并将其赋值给任何变量: from typing import Any a = None # type: Any a = [] # OK a = 2 # OK s = '' # type: str s = a # OK def foo(item: Any) -> int: # Typechecks; 'item

  • python typing模块--类型提示支持

    目录 1.typing介绍 2.typing的作用 3.常用类型 3.1 代码示例 4.typing模块的其他用法 4.1 类型别名 4.2 NewType 4.3 Callable 4.4 TypeVar泛型 4.5 Any 4.6 Union 1.typing介绍 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数的类型或者返回值的类型,这样会导致我们在写完代码一段时间后回过头再看代码,忘记了自己写的函数需要传什么类型的参数,返回什么类型的结果,这样就不得不去阅读代码的具体内容,

  • Python中typing模块与类型注解的使用方法

    实例引入 我们知道 Python 是一种动态语言,在声明一个变量时我们不需要显式地声明它的类型,例如下面的例子: a = 2 print('1 + a =', 1 + a) 运行结果: 1 + a = 3 这里我们首先声明了一个变量 a,并将其赋值为了 2,然后将最后的结果打印出来,程序输出来了正确的结果.但在这个过程中,我们没有声明它到底是什么类型. 但如果这时候我们将 a 变成一个字符串类型,结果会是怎样的呢?改写如下: a = '2' print('1 + a =', 1 + a) 运行结

  • 详解duck typing鸭子类型程序设计与Python的实现示例

    在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定. 这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,"鸭子测试"可以这样表述: "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子." 在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的.例如,在不使用鸭子类型的语言中

  • python使用typing模块加强代码的可读性(实战演示)

    一.需求描述 没有类型提示的编程,总觉得不太方便,好在python3.5以后内置了typing模块. typing模块会对函数和变量类型进行注解. 但是Python 运行时不强制执行函数和变量类型注解,但这些注解可用于类型检查器.IDE.静态检查器等第三方工具. 官方网址: typing --- 类型提示支持 - Python 3.10.1 文档 https://docs.python.org/zh-cn/3/library/typing.html 二.实战演练 1.体验注解功能 如下所示,定义

  • Python中typing模块的具体使用

    目录 typing库 一. 简介 二. 别名 1. 类型别名 2. NewType 3. 可调用对象 三. 泛型支持 1.集合类型 2. 抽象基类 3. 泛型 4. Any 5. 特殊形式 5.1 Type 5.2 Union 5.3 Optional 5.4 Tuple 5.5 Callable typing库 一. 简介 Python是一门弱类型的语言,很多时候我们可能不清楚函数参数类型或者返回值类型,很有可能导致一些类型没有指定方法,在写完代码一段时间后回过头看代码,很可能忘记了自己写的函

  • python解析xml模块封装代码

    有如下的xml文件: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?>  <root>  <childs>  <child name='first' >1</child>  <child value="2">2</child>  </childs>  </root> 下面介绍python解

  • python使用logging模块发送邮件代码示例

    logging模块不只是能记录log,还能发送邮件,使用起来非常简单方便 #coding=utf-8 ''''' Created on 2016-3-21 @author: Administrator ''' import logging, logging.handlers class EncodingFormatter(logging.Formatter): def __init__(self, fmt, datefmt=None, encoding=None): logging.Format

  • python email smtplib模块发送邮件代码实例

    本例使用 QQ邮箱测试,需要打开 QQ邮箱的 smtp协议,获取授权码 代码内容如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'junxi' import smtplib from email.mime.text import MIMEText # 文本模式 # msg = MIMEText('send by python...', 'plain', 'utf-8') # html 格式 msg = MIMEText(

  • Python基于smtplib模块发送邮件代码实例

    smtplib模块负责发送邮件:是一个发送邮件的动作,连接邮箱服务器,登录邮箱,发送邮件(有发件人,收信人,邮件内容). email模块负责构造邮件:指的是邮箱页面显示的一些构造,如发件人,收件人,主题,正文,附件等. email模块下有mime包,mime英文全称为"Multipurpose Internet Mail Extensions",即多用途互联网邮件扩展,是目前互联网电子邮件普遍遵循的邮件技术规范. 该mime包下常用的有三个模块:text,image,multpart.

  • Python使用pickle模块存储数据报错解决示例代码

    本文研究的主要是Python使用pickle模块存储数据报错解决方法,以代码的形式展示,具体如下. 首先来了解下pickle模块 pickle提供了一个简单的持久化功能.可以将对象以文件的形式存放在磁盘上. pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化, pickle序列化后的数据,可读性差,人一般无法识别. 接下来我们看下Python使用pickle模块存储数据报错解决方法. 代码: # 写入错误 TypeEr

  • Python实战小程序利用matplotlib模块画图代码分享

    Python中的数据可视化 matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件. 实战小程序:画出y=x^3的散点图 样例代码如下: #coding=utf-8 import pylab as y #引入pylab模块 x = y.np.linspace(-10, 10, 100) #设置x横坐标范围和点数 y.plot(x, x*x*x,'or') #生成图像 ax = y.gca() a

随机推荐