首页 > 编程语言 >如何方便的给你的python函数进行参数类型检查

如何方便的给你的python函数进行参数类型检查

时间:2023-03-31 11:46:27浏览次数:45  
标签:return 函数 python label 参数 kwargs type decorator name

python有时候很麻烦的一点,为了运算速度,不给你做类型检查。这个特性被各路大佬当成重载的秘宝,但是有时候对工程性的项目来说并不安全。

这里介绍一个notice工具,会对函数形参标注类型和实参类型不一样时进行输出提醒(不报错,不影响运行)

 1 from typing import get_type_hints
 2 from functools import wraps
 3 from inspect import getfullargspec
 4  
 5 # 定义函数参数类型的检查函数
 6 def parameter_check(obj, **kwargs):
 7     hints = get_type_hints(obj)
 8     for label_name, label_type in hints.items():
 9         # print(label_name)
10         # print(label_type)
11         # 返回类型不检查 跳过 只检查实际传入参数的类型是否正确
12         if label_name == "return":
13             continue
14         # 判断实际传入的参数是否与函数标签中的参数一致
15         if not isinstance(kwargs[label_name], label_type):
16             print(f"参数:{label_name} 类型错误 应该为:{label_type}")
17 
18 # 使用装饰器进行函数包裹
19 def wrapped_func(decorator):
20     @wraps(decorator)
21     def wrapped_decorator(*args, **kwargs):
22         func_args = getfullargspec(decorator)[0]
23         kwargs.update(dict(zip(func_args, args)))
24         parameter_check(decorator, **kwargs)
25         return decorator(**kwargs)
26     return wrapped_decorator
27 
28 @wrapped_func
29 def add0(a: int, b: int) -> int:
30     return a + b
31 
32 
33 @wrapped_func
34 def add1(a: int, b: float = 520.1314) -> float:
35     return a + b
36 
37 # print(add0(1, 1))
38 print(add0("hello", "world"))

运行结果如下图:

 

 可以看出,进行函数包裹后,仍然能运行函数,只是运行前进行了类型检查和提醒。

标签:return,函数,python,label,参数,kwargs,type,decorator,name
From: https://www.cnblogs.com/St-Lovaer/p/17267487.html

相关文章

  • Python: utilities
     decimal_to_binarydefdecimal_to_binary(v:float,precison:int=6)->str:ifv==0:return'0b0'binary=''integral=int(v)#integralpartmantissa=v-integral#fractionalpart#conver......
  • 好饭不怕晚,Google基于人工智能AI大语言对话模型Bard测试和API调用(Python3.10)
    谷歌(Google)作为开源过著名深度学习框架Tensorflow的超级大厂,是人工智能领域一股不可忽视的中坚力量,旗下新产品Bard已经公布测试了一段时间,毁誉参半,很多人把Google的Bard和OpenAI的ChatGPT进行对比,GoogleBard在ChatGPT面前似乎有些技不如人。事实上,GoogleBard并非对标ChatGPT......
  • mysql,pg连接重试参数配置
    PostgreSQLJDBCURL连接重试的示例:StringdbUrl="jdbc:postgresql://localhost:5432/mydb?autoReconnect=true&maxReconnects=5&connectTimeout=5000";Connectionconnection=null;try{connection=DriverManager.getConnection(dbUrl,"user......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-智能编写Python注释文档字符串从0到1快速入门
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-类比语句智能生成从0到1快速入门——官网推荐
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • 全网最详细中英文ChatGPT-GPT-4示例文档-自然语言智能获取颜色从0到1快速入门——官网
    目录Introduce简介setting设置Prompt提示Sampleresponse回复样本APIrequest接口请求python接口请求示例node.js接口请求示例curl命令示例json格式示例其它资料下载ChatGPT是目前最先进的AI聊天机器人,它能够理解图片和文字,生成流畅和有趣的回答。如果你想跟上AI时代的潮流......
  • python zip()函数
    Pythonzip()函数描述zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用*号操作符,可以将元组解压为列表。zip方法在Python2和Python3中的不同:......
  • 细说Python的lambda函数用法
    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。1.为什么要用lambda函数?先举一个例子:将一个列表里的每个元素都平方。先用def来定义函数,代码如下defsq(x):re......
  • 细说Python的lambda函数用法
    在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数。今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式。1.为什么要用lambda函数?先举一个例子:将一个列表里的每个元素都平方。先用def来定义函数,代码如下 defsq(x):......
  • [Python]同步上下文管理
    '''同步上下文管理器'''importtimeclassContextManager:def__init__(self):self.conn=Nonedefaction(self):returnself.conndef__enter__(self):#链接数据库print("开始连接")time.sleep......