python的typing模块
python的typing模块
typeing模块在python中提供类型支持,主要功能有:
- 类型检查,防止运行时出现参数和返回值类型不符合
- 作为开发文档附件说明,方便使用者调用时传入和返回参数类型(python在调用函数或变量时,无需对参数或变量进行类型说明,不利于阅读)
使用typing模块,可以对参数类型做注释并检查,不会影响程序运行,不会报正式错误,只有提醒。
# 可以省略,str,int都是Python内置的数据类型
from typing import *
# 创建函数
def digits_sum(num:str) -> int:
digits_arr = map(lambda x: int(x), num)
return sum(digits_arr)
# 测试
num = "352"
result = digits_sum(num=num)
print(result)
# 输出
10
map函数:
map是python的内置函数,会根据提供的函数对指定的序列做映射,第一个参数为函数名,后面的参数是一个或多个可迭代的序列,返回一个新的集合:
map(function,iterable,...)
具体是:将函数作用在序列中的每个元素上,得到一个新的序列,不改变原有序列:
- 例1
def square(x):
return x ** 2
res = map(square,[1,2,3,4,5]) # 返回迭代器
list(res)
# 结果如下:
[1, 4, 9, 16, 25]
- 例2
from typing import Dict, Any
# 创建函数
# d为字典,其key值为str,val为任意类型(Any);输出为字典,key值为str,val值为float或者int
# 可以使用多个数据类型,如使用 or 或 | 分隔多个数据类型
def dict_multipy(d: Dict[str, Any]) -> Dict[str, float or int]:
new_dict = {}
for k, v in d.items():
# isinstance():判断一个函数是否是一个已知的类型,类似 type()
if isinstance(v, (float, int)):
new_dict[k] = v * 2
return new_dict
# 测试
d = {"no": "100", "age": 12, "work_year": 3, "name": "JC"}
new_d = dict_multipy(d=d)
print(new_d)
# 输出
{'age': 24, 'work_year': 6}
- 例3:创建别名或者新的数据类型
from typing import List
# 取List[float]别名为Vector
Vector = List[float]
def scale(scalar: float, vector: Vector) -> Vector:
return [scalar * num for num in vector]
scale(2.0, [1.0, -4.2, 5.4])
# 输出
[2.0, -8.4, 10.8]
lambda 匿名函数:
lambda函数没有函数名,无需定义,直接使用:
lambda 参数,参数,······:表达式
定义:
- 由关键词lamdba修饰
- 冒号之前的是函数参数,可以为空,即无参数匿名函数
- 冒号之后是表达式,无需写return,结果即是输出
- 例子
f = lambda x, y, z: x+y+z
f(1,2,3)
# 输出
6