对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的ORM框架SQLObject入门实例
Apr 28 Python
python实现简单socket程序在两台电脑之间传输消息的方法
Mar 13 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
Python实现Linux命令xxd -i功能
Mar 06 Python
利用python求相邻数的方法示例
Aug 18 Python
详解如何设置Python环境变量?
May 13 Python
使用PyTorch训练一个图像分类器实例
Jan 08 Python
python 控制台单行刷新,多行刷新实例
Feb 19 Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 Python
Keras Convolution1D与Convolution2D区别说明
May 22 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
Feb 22 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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
改变Apache端口等配置修改方法
2008/06/05 PHP
php类常量用法实例分析
2015/07/09 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
28个JS验证函数收集
2010/03/02 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
js中hash和ico的关联分析
2015/02/05 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
jQuery实现上传图片前预览效果功能
2017/08/03 jQuery
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
JSON 数据格式详解
2017/09/13 Javascript
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
JavaScript 处理树数据结构的方法示例
2019/06/16 Javascript
VUE实现移动端列表筛选功能
2019/08/23 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
[26:52]LGD vs EG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
利用Python进行异常值分析实例代码
2017/12/07 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
Python 实现向word(docx)中输出
2020/02/13 Python
PyTorch加载自己的数据集实例详解
2020/03/18 Python
PyTorch中model.zero_grad()和optimizer.zero_grad()用法
2020/06/24 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
大学生自我鉴定
2013/12/08 职场文书
英语教师岗位职责
2014/03/16 职场文书
灰雀教学反思
2014/04/28 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
留学推荐信怎么写
2015/03/26 职场文书
暖春观后感
2015/06/08 职场文书
导游词之云南省玉龙雪山
2019/12/19 职场文书
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android