对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 相关文章推荐
pycharm 使用心得(八)如何调用另一文件中的函数
Jun 06 Python
Python二维码生成库qrcode安装和使用示例
Dec 16 Python
Python使用xlrd读取Excel格式文件的方法
Mar 10 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
Jan 20 Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 Python
Pandas 同元素多列去重的实例
Jul 03 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
Python Sphinx使用实例及问题解决
Jan 17 Python
Python安装whl文件过程图解
Feb 18 Python
OpenCV全景图像拼接的实现示例
Jun 05 Python
如何利用python实现列表嵌套字典取值
Jun 10 Python
pd.drop_duplicates删除重复行的方法实现
Jun 16 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
通达OA公共代码 php常用检测函数
2011/12/14 PHP
zf框架的Filter过滤器使用示例
2014/03/13 PHP
PHP中使用curl伪造IP的简单方法
2015/08/07 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
js实现图片旋转的三种方法
2014/04/10 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
JQuery遍历元素的后代和同胞实现方法
2016/09/18 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
python合并文本文件示例
2014/02/07 Python
python中Flask框架简单入门实例
2015/03/21 Python
Python数据类型详解(二)列表
2016/05/08 Python
Python利用带权重随机数解决抽奖和游戏爆装备问题
2016/06/16 Python
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
python tornado微信开发入门代码
2018/08/24 Python
使用Python制作表情包实现换脸功能
2019/07/19 Python
python中文分词库jieba使用方法详解
2020/02/11 Python
OpenCV 表盘指针自动读数的示例代码
2020/04/10 Python
python绘制分布折线图的示例
2020/09/24 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
国际花店:Pickup Flowers
2020/04/10 全球购物
法人代表身份证明书及授权委托书
2014/09/16 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
农村房屋租赁合同(范本)
2019/07/23 职场文书
七年级上册生物的课件
2019/08/07 职场文书
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server