Python标准库typing
Python标准库typing
简介
python3.5+才有
Python 运行时不强制执行函数和变量类型注解,但这些注解可用于类型检查器、IDE、静态检查器等第三方工具。
作用
- 类型检查,防止运行时出现参数和返回值类型不符合。(pycharm会自动联想类型)
- 作为开发文档附加说明,方便使用者调用时传入和返回参数类型。
- 该模块加入后并不会影响程序的运行,不会报正式的错误,只有提醒
最早接触是在leetcode做题的时候看到的,后面在各种源码中广泛有看到。
比如LeetCode算法第一题:两数之和,的解题模板(python3)
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
比如Selenium中get方法的源码
def get(self, url: str) -> None:
"""
Loads a web page in the current browser session.
"""
self.execute(Command.GET, {'url': url})
实例
变量定义
示例代码
name:str
name = 'wuxianfeng'
print(name.upper())
PEP8中有提及,在声明变量类型时,变量后方紧跟一个冒号,冒号后面跟一个空格,再跟上变量的类型。
其实我们很少这么做就是了。更多是放在函数或者方法中
函数参数(基础类型)
示例代码
def greeting(name: str) -> str:
return 'Hello ' + name
- 声明name参数是str类型,格式是参数名冒号类型
- 返回对象也是str类型,格式是->类型,注意是一个-
- ->先写,再写冒号!
语法
参数名:类型 def 函数名(参数...) -> 类型:
一个好处就是用pycharm在输入代码的时候
def func(name:str) ->None:
print(name.) #输入到name.的时候能自动补齐出来str类型的方法,如果不声明绝对是没有的
str是默认类型,你发现跟typing模块好像并没任何关系,因为这是基础的模块,无需导入即可使用。类似的还有int,float,bool等
函数参数默认值
示例代码:Faker类的初始化方法
def __init__(
self,
locale: Optional[Union[str, Sequence[str], Dict[str, Union[int, float]]]] = None,
providers: Optional[List[str]] = None,
generator: Optional[Generator] = None,
includes: Optional[List[str]] = None,
use_weighting: bool = True,
**config: Any,
) -> None:
语法
参数名:类型=默认值 实例: use_weighting: bool = True
跟以前相比就是加了冒号和类型
高级类型List和Tuple
此处的中级类型指的是List和Tuple,Dict这些
示例代码:文章开头提到的leetcode第一题,两数之和
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
- 意思是nums这个参数是一个list,其中每个元素是int类型的
注意,代码模板不会显示所有的细节,其实这是需要导入的
from typing import Dict, List, Tuple
实例代码1
from typing import List
def func(names:List[str]) -> None:
for name in names: #如果你输入names.,会产生列表的方法
print(name) #如果你输入name.,会产生字符串的方法 names = ['wuxianfeng','qianyuli']
func(names)
注意上述代码跟以下代码的区别
def func1(*names):
for name in names:
print(name)
classes = ['c1','c2']
func1(*classes)
实例代码2:多个相同类型可以用...来替代,但要注意是Tuple[]
from typing import Tuple
def func(ages: Tuple[int, ...]) -> None:
for age in ages:
print(age) ages = (18, 19, 22, 34,)
func(ages)
此处比较诡异的是如果我写
from typing import Tuple
def func(ages: Tuple[int,int]) -> None:
for age in ages:
print(age) ages = (18, 19, 22, 34,) #这里只能写2个值,多或者少都会警告!
func(ages) #应为类型Tuple[int,int],实为类型Tuple[int,int,int,int]
但是List却没有这个问题,后续有空查下
高级类型Dict
dict是key:value形式
注意跟Tuple一样,都是[]的形式,不能是{}
实例代码
from typing import Dict def func(info: Dict[str, str]) -> None:
for k, v in info.items():
print(k)
print(v) nanjings = {'wuxianfeng': 'male', 'qianyuli': 'female'}
func(nanjings)
类型别名
示例
from typing import List Alias = List[int] #这里可以是List或者list def scale(orgin_num: int, vector: Alias) -> Alias:
return [orgin_num * vec for vec in vector] print(scale(2, [3,4,5]))
类型嵌套
示例
from typing import List def func(vars: List[List[int]]) -> None:
for _ in vars:
for __ in _:
print(__) func([[1, 2], [2, 3]])
可选类型Optional
示例代码
from typing import Optional def func(arg: Optional[int] = None):
print(arg) func()
func(1)显然你去掉=None是不行的,func()的时候会提示错误
Optional[int] 等价于 Union[int, None]
小结
str、int、float、bool无需声明,直接用即可
List是list的泛型,其后紧跟一个方括号,里面代表了构成这个列表的元素类型。
age:List[int]
var: List[int or float] = [2, 3.5]
vars: List[List[int]] = [[1, 2], [2, 3]]
Tuple、元组,是 tuple 的泛型,其后紧跟一个方括号,方括号中按照顺序声明了构成本元组的元素类型
Tuple[X, Y] 代表了构成元组的第一个元素是 X 类型,第二个元素是 Y 类型
person: Tuple[str, int, float] = ('Mike', 22, 1.75)
- NamedTuple,是 collections.namedtuple 的泛型,实际上就和 namedtuple 用法完全一致
Dict、字典,是 dict 的泛型;Mapping,映射,是 collections.abc.Mapping 的泛型。根据官方文档,Dict 推荐用于注解返回类型,Mapping 推荐用于注解参数。它们的使用方法都是一样的,其后跟一个中括号,中括号内分别声明键名、键值的类型
def size(rect: Mapping[str, int]) -> Dict[str, int]:
return {'width': rect['width'] + 100, 'height': rect['width'] + 100}
- MutableMapping 则是 Mapping 对象的子类,在很多库中也经常用 MutableMapping 来代替 Mapping
Set、集合,是 set 的泛型;AbstractSet、是 collections.abc.Set 的泛型。根据官方文档,Set 推荐用于注解返回类型,AbstractSet 用于注解参数。它们的使用方法都是一样的,其后跟一个中括号,里面声明集合中元素的类型
def describe(s: AbstractSet[int]) -> Set[int]:
return set(s)
Python标准库typing的更多相关文章
- Python标准库--typing
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 模块简介 Python 3.5 增加了一个有意思的库--typ ...
- 转--Python标准库之一句话概括
作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...
- Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
- Python标准库14 数据库 (sqlite3)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- python标准库xml.etree.ElementTree的bug
使用python生成或者解析xml的方法用的最多的可能就数python标准库xml.etree.ElementTree和lxml了,在某些环境下使用xml.etree.ElementTree更方便一些 ...
- 【python】Python标准库defaultdict模块
来源:http://www.ynpxrz.com/n1031711c2023.aspx Python标准库中collections对集合类型的数据结构进行了很多拓展操作,这些操作在我们使用集合的时候会 ...
- Python标准库
Python标准库是随Python附带安装的,它包含大量极其有用的模块.熟悉Python标准库是十分重要的,因为如果你熟悉这些库中的模块,那么你的大多数问题都可以简单快捷地使用它们来解决. sys模块 ...
- Python标准库07 信号 (signal包,部分os包)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux的信号基础之后,Python标准库中的signal包就很容易学习 ...
随机推荐
- KeeWiDB的高性能修炼之路:架构篇
数据也有冷热之分,你知道吗? 根据访问的频率的高低可将数据分为热数据和冷数据,访问频率高的则为热数据,低为冷数据.如果热.冷数据不区分,一并存储,显然不科学.将冷数据也存储在昂贵的内存中,那么你想,成 ...
- 题解合集 (update on 11.5)
收录已发布的题解 按发布时间排序. 部分可能与我的其他文章有重复捏 qwq . AtCoder for Chinese: Link ZHOJ: Link 洛谷 \(1\sim 5\) : [题解]CF ...
- OpenCvSharp的安装和使用
OpencvSharp是opencv的C#版本,使用习惯了opencv的人学起OpenCvSharp会很容易上手,看了网上很多的安装方式,最后我感觉还是自己去下载安装包的方式最简单,通过Nuget的方 ...
- 2022-11-13 Acwing每日一题
本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...
- 自学 TypeScript 第一天 环境开发配置 及 TS 基本类型声明
前言: 自学第一天,什么是TS ,为什么要用 TS TS 全程 Typed JavaScript at Any Scale 解释起来就是 添加了类型系统的 JavaScript, 是 JavaScr ...
- 【云原生 · Kubernetes】配置 Rancher docker 云平台
个人名片: 因为云计算成为了监控工程师 个人博客:念舒_C.ying CSDN主页️:念舒_C.ying 1.1 Rancher 概述 Rancher 是一个开源的企业级容器管理平台.通过 Ranc ...
- Go语言输出函数fmt.Print、fmt.Printf、fmt.Println的用法区别
fmt 包的介绍 fmt = format,是一种格式化输出函数汇总包,用于格式化输出 fmt.Print === 原样输出 Print formats using the default forma ...
- 关于pip3 ImportError: cannot import name 'main'的报错的原因及解决办法
这个问题的出现大多数都是因为你用错误的方法去升级pip3导致的 先来说一下正确的升级方法: python3 -m pip install --upgrade pip 我发现升级后版本变为了 19.x, ...
- MICCAI 论文投稿须知翻译
MICCAI 论文投稿须知翻译 以MICCAI 2021 PAPER SUBMISSION AND REBUTTAL GUIDELINES为例,每年投稿须知类似 作者信息和rebuttal 本文件包含 ...
- Servlet面试题合集
servlet的生命周期 在创建servlet对象时,通过调用.init()方法进行初始化 通过service()方法来接收客户端的请求.根据请求方式的不同转发给对应的doGet()或doPost() ...