当前位置: 首页 > news >正文

typing模块

typing模块

文章目录

  • typing模块
    • 一、引入
    • 二、typing模块的作用
    • 三、typing模块的常用方式
      • 说明:
      • typing支持可能的多种类型
    • 四、typing常用的类型:

一、引入

  • 前言:很多人在写完代码一段时间后回过头看代码,很可能忘记了自己写的函数需要传什么参数,返回什么类型的结果,就不得不去阅读代码的具体内容,降低了阅读的速度,加上Python本身就是一门强类型动态语言,这种现象就变得更加的严重,而typing这个模块很好的解决了这个问题。
  • 注意:typing模块只有在python3.5以上的版本中才可以使用,pycharm目前支持typing检查

二、typing模块的作用

  1. 类型检查,防止运行时出现参数和返回值类型不符合。
  2. 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
  3. 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒。

三、typing模块的常用方式

代码示例:

from typing import List, Tuple, Dict


def add(a: int, string: str, f: float, b: bool) -> Tuple[List, Tuple, Dict, bool]:

    l1 = list(range(a))
    tup = (string, string, string)
    d = {"a": f}
    b1 = b
    return l1, tup, d, b1


if __name__ == '__main__':
    print(add(5, "淘小欣", 119.2, False))

'''
([0, 1, 2, 3, 4], ('派大星', '派大星', '派大星'), {'a': 119.2}, False)
'''

说明:

  • 在传入参数时通过”参数名:类型”的形式声明参数的类型;

  • 返回结果通过”-> 结果类型”的形式声明结果的类型。

  • 在调用的时候如果参数的类型不正确pycharm会有提醒,但不会影响程序的运行。

  • 对于如list列表等,还可以规定得更加具体一些,如:”-> List[str]”,规定返回的是列表,并且元素是字符串。

    现在对上面代码进行修改,可以看到pycharm背景变黄色区域,就是错误类型提醒:

    img

typing支持可能的多种类型

  • 由于python天生支持多态,迭代器中的元素可能有多种。

    from typing import List, Tuple, Dict
    
    
    def add(string: str, f: float, b: bool or str, a: int = 90) -> Tuple[List, Tuple, Dict, str or bool]:
        list1 = list(range(a))
        tup = (string, string, string)
        d = {"a": f}
        bl = b
        return list1, tup, d, bl
    
    
    if __name__ == '__main__':
        print(add('淘小欣', 183.1, False, 5))
        print(add('淘小欣', 183.1, 'False', 5))
    
    #运行结果(跟不用typing无异):
    '''
    ([0, 1, 2, 3, 4], ('淘小欣', '淘小欣', '淘小欣'), {'a': 183.1}, False)
    ([0, 1, 2, 3, 4], ('淘小欣', '淘小欣', '淘小欣'), {'a': 183.1}, 'False')
    '''
    
    

    ps:使用or关键字表示多种类型

四、typing常用的类型:

  • int、long、float: 整型、长整形、浮点型
  • bool、str: 布尔型、字符串类型
  • List、 Tuple、 Dict、 Set:列表、元组、字典、集合
  • Iterable、Iterator:可迭代类型、迭代器类型
  • Generator:生成器类型

相关文章:

  • 压缩zipfile与解压缩tarfile模块
  • pyecharts 模块的简单使用
  • hashlib 与 hmac 模块
  • python之包
  • python之logging模块详解
  • logging模块基本介绍及使用
  • 面向对象的由来
  • python之面向对象编程
  • 类的封装
  • 类的多继承下的菱形问题
  • 类的派生
  • 类的多态与鸭子类型
  • 绑定方法与非绑定方法
  • 基于TCP协议模拟ssh远程执行命令的CS架构软件
  • 基于TCP协议的套接字网络(socket)编程
  • [数据结构]链表的实现在PHP中
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 2017年终总结、随想
  • CSS 专业技巧
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Linux中的硬链接与软链接
  • Lucene解析 - 基本概念
  • mongo索引构建
  • Mysql优化
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • use Google search engine
  • Vue组件定义
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 闭包,sync使用细节
  • 区块链将重新定义世界
  • 容器服务kubernetes弹性伸缩高级用法
  • 微信小程序开发问题汇总
  • 我有几个粽子,和一个故事
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • ​如何防止网络攻击?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三)c52学习之旅-点亮LED灯
  • (十)c52学习之旅-定时器实验
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)Linux下编译安装log4cxx
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core引入性能分析引导优化
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET程序员迈向卓越的必由之路
  • /run/containerd/containerd.sock connect: connection refused
  • @property python知乎_Python3基础之:property
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [CareerCup][Google Interview] 实现一个具有get_min的Queue
  • [docker] Docker的私有仓库部署——Harbor