浅谈python函数签名
2024-09-01 07:00:00
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出。
在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名。
获取函数签名及参数
使用标准库的signature方法,获取函数签名对象;通过函数签名的parameters属性,获取函数参数。
# 注意是小写的signature
from inspect import signature def foo(value):
return value # 获取函数签名
foo_sig = signature(foo)
# 通过函数签名的parameters属性,可以获取函数参数
foo_params = foo_sig.parameters
创建函数签名
使用类Parameter的实例创建函数参数列表;使用Signature类,接受函数参数列表,实例化出函数签名实例。
# 注意是首字母大写的Signature
from inspect import Signature, Parameter # 创建一个函数参数列表,列表内的元素由类Parameter的实例组成
# Parameter实例化时,依次接受参数名、参数类型、默认值和参数注解
# 默认值和参数类型默认为空,这里的空值不是None,而是Parameter.empty,代表没有值
parms = [Parameter('x', Parameter.POSITIONAL_OR_KEYWORD),
Parameter('y', Parameter.POSITIONAL_OR_KEYWORD),
Parameter('z', Parameter.KEYWORD_ONLY, default=9)] # 使用Signature类,接受函数参数列表,实例化出函数签名实例
sig = Signature(parms)
检查函数参数是否匹配签名
使用函数签名的bind的方法,检查函数参数是否匹配签名。
延续上面的例子,通过函数签名的bind方法,接受函数参数,如果匹配,返回参数BoundArguments实例,如果不匹配,则抛出TypeError,并给出详细的异常信息。
通过BoundArguments实例的属性,可以获取函数签名、参数的值等内容。
bound_args_01 = sig.bind(1, 2, z=3)
# <BoundArguments (x=1, y=2, z=3)>
bound_args_02 = sig.bind(1, 2)
# <BoundArguments (x=1, y=2)>
bound_args_03 = sig.bind(1)
# TypeError
# missing a required argument: 'y'
最新文章
- x01.Tetris: 俄罗斯方块
- webpack-vue搭建,部署到后端
- BZOJ 3942: [Usaco2015 Feb]Censoring
- 学习Python的第一课(简单的单元测试)
- http协议本身能获取客户端Mac地址问题
- PHP学习笔记(2) - 对PHP的印象
- 在Myeclipse中用Java语言操作mysql数据库
- CentOS下使用命令行Web浏览器Links
- 处理SQL Server中的重复行
- QT:图形的描画(折线,柱状图,多边形)
- Dubbo 源码分析 - 集群容错之 Router
- JavaScript的内置对象(Global对象)
- Luogu 3424 [POI2005]SUM-Fibonacci Sums
- 使用pandas,7行代码实现朴素贝叶斯
- seek()方法的使用
- Daily Scrum (2015/10/28)
- 【python】vscode python环境配置
- swift 触摸与手势
- 12.Proxy
- 让Firefox支持offsetX、offsetY