对python函数签名的方法详解


Posted in Python onJanuary 22, 2019

函数签名对象,表示调用函数的方式,即定义了函数的输入和输出。

在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'

以上这篇对python函数签名的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 分析Nginx访问日志并保存到MySQL数据库实例
Mar 13 Python
Python线程中对join方法的运用的教程
Apr 09 Python
Python基于递归算法实现的走迷宫问题
Aug 04 Python
Python基于time模块求程序运行时间的方法
Sep 18 Python
Python遍历numpy数组的实例
Apr 04 Python
Python tkinter的grid布局及Text动态显示方法
Oct 11 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
Python3中列表list合并的四种方法
Apr 19 Python
django 中的聚合函数,分组函数,F 查询,Q查询
Jul 25 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
python中return的返回和执行实例
Dec 24 Python
Python提取PDF指定内容并生成新文件
Jun 09 Python
python实现大转盘抽奖效果
Jan 22 #Python
Python函数返回不定数量的值方法
Jan 22 #Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 #Python
Python Pillow Image Invert
Jan 22 #Python
python 通过类中一个方法获取另一个方法变量的实例
Jan 22 #Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 #Python
Python实现深度遍历和广度遍历的方法
Jan 22 #Python
You might like
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
2014/05/12 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
表单元素的submit()方法和onsubmit事件应用概述
2013/02/01 Javascript
jquery 简单应用示例总结
2013/08/09 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
基于jQuery实现仿淘宝套餐选择插件
2015/03/04 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
基于jQuery的表单填充实例
2017/08/22 jQuery
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
使用React代码动态生成栅格布局的方法
2020/05/24 Javascript
Python修改MP3文件的方法
2015/06/15 Python
在python中使用with打开多个文件的方法
2019/01/07 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
python 利用pandas将arff文件转csv文件的方法
2019/02/12 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
年度考核自我评价
2014/01/25 职场文书
美术毕业生求职信
2014/02/25 职场文书
青年志愿者活动总结
2014/04/26 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
优秀教师先进材料
2014/12/16 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
Python MNIST手写体识别详解与试练
2021/11/07 Python