类型注解的简要理解

导读:本篇文章讲解 类型注解的简要理解,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

python类型注解:

python是动态语言,变量随时可以被赋值,且能赋值为不同的类型

python不是静态语言,变量类型在运行时才决定

动态语言弊端:

难发现,难使用;不做任何类型检查,只会在运行时才暴露出问题,函数的使用者看到时并不知道你的函数的设计,不知道该传入什么类型的数据

关于弊端解决的办法:

     1.增加文档,这是一个惯例,不是强制标准,需要注意的是,函数定义更新了,文档未必同步更新

     2.利用函数注解:

在3.5以后的版本才引入使用,

对函数的参数进行注解

对函数的返回值进行类型注解

支队函数参数做一个辅助的说明,并不对函数参数进行类型检查

提供第三方工具,做代码分析,发现隐藏的bug

函数注解的信息,保存在__annotations__

调用类方法:     函数.__annotations__

变量注解,在3.6后引入:      i: int = 3

业务应用:

函数类型检查思路,

     函数参数的检查一定实在函数外

     检查函数(实际应用参数):

               利用形参定义与实际应用参数的类型进行比较

     .__annotations__属性是一个字典,其中包括返回值类型的声明,几级啊折要做位置参数的判断,无法与字典中的声明对应,可使用inspect模块

inspect模块:

     提供获取对象新的函数,可以检查函数和类,类型检查

signature(callable) 获取签名,(函数签名包含了一个函数的信息,它包括函数名、他的参数类型、他所在的类和名称空间及其他信息)

import inspect
def add (x:int,y:int,*args,**kwargs)->int: #定义函数参数的注解
     return x+y
print(add.__annotations__) #查看add函数定义类型
sig=inspect.signature(add) #函数的定义(签名)
print(sig) #查看add函数的签名(声明)
print('params:',sig.parameters) #有序字典(有序的参数列表)
print('return:',sig.return_annotation) #查看返回值的定义类型
print(sig.parameters['y']) #查看参数y的参数注解
print(sig.parameters['x'].annotation) #查看参数y的定义类型
print(sig.parameters['args']) #查看参数args的参数注解
print(sig.parameters['args'].annotation) #查看参数args的参数定义类型
print(sig.parameters['kwargs']) #查看kwargs的参数注解
print(sig.parameters['kwargs'].annotation) #查看kwargs的参数定义类型
使用inspect模块对一个函数进行判断:
inspect.isfunction(func):是否是函数
inspect.ismethod(func):是否是类的方法
inspect.isgenerator(func):是否是生成器对象
inspect.isgeneratorfunction(func):是否是生成器函数
inspect.isclass(func) :是否是类
inspect.ismodule(模块):是否是模块
inspect.isbuiltin(print):是否是内建对象
is函数可通过查阅iinspect模块查看更多使用帮助

Parameter对象:(有序字典)

     保存在元组中,是只读的

     name,参数的名字
     annotation,参数的注解,可能未定义
     default,      参数的缺省值,可能未定义
     empty ,      特殊的类,用来标记default属性或者注释annotation属性的空值
     kind             实参如何绑定到形参,就是形参的类型
POSITIONAL_ONLY,值必须是位置参数提供(python未实现)
POSITIONAL_OR_KEYWORD,值可以作为关键字或者位置参数提供
VAR_POSITIONAL 可变位置参数,对应*args
KEYWORD-ONLY keyword-only参数,对应*或者*args之后的出现非可变关键之参数
VAR_KEYWORD,可变关键字参数,对应**kwargs

partial

偏函数,把函数部分的参数固定下来,相当于为部分的参数添加了一个固定的默认值,形成了一个新的函数并返回

从partial生成的新函数,是对原函数的封装

lru_cache(maxsize=128,typed=Flase)

least-recently-used装饰器,lru,最近最少使用,cache缓存

如果maxsize设置为None,则禁用LRU功能,并且缓存可以无限制增长,当max是二的幂时,LRU功能执行的最好

如果typed设置为True,则不同类型的函数参数将单独缓存,例如f(3),f(3.0)将被视为具有不同结果的不同调用

lru_cache装饰器作用

使用前提:

     同样的函数参数一定得到同样的结果

     函数执行时间很长,且要执行多次执行

本质是函数调用的参数=>返回值

缺点:

不支持缓存过期,key无法过期,失效

不支持清除操作

不支持分布式,是一个单机的缓存

使用场景,单机上需要空间换时间的地方,可以用缓存来将计算编程快速的查询

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/102922.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!