对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 自动安装 Rising 杀毒软件
Apr 24 Python
python的正则表达式re模块的常用方法
Mar 09 Python
Python爬取读者并制作成PDF
Mar 10 Python
介绍Python中内置的itertools模块
Apr 29 Python
Python中time模块与datetime模块在使用中的不同之处
Nov 24 Python
Python实现的径向基(RBF)神经网络示例
Feb 06 Python
解决csv.writer写入文件有多余的空行问题
Jul 06 Python
对python GUI实现完美进度条的示例详解
Dec 13 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python log模块logging记录打印用法解析
Jan 20 Python
Python unittest单元测试框架实现参数化
Apr 29 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判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP实现分布式memcache设置web集群session同步的方法
2018/04/10 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
日期处理的js库(迷你版)--自建js库总结
2011/11/21 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
JS定时刷新页面及跳转页面的方法
2013/07/04 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JsRender for object语法简介
2014/10/31 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
基于jquery实现左右按钮点击的图片切换效果
2021/01/27 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
使用vue2实现带地区编号和名称的省市县三级联动效果
2018/11/05 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
深入理解Python 代码优化详解
2014/10/27 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
Python 查看文件的编码格式方法
2017/12/21 Python
django ajax json的实例代码
2018/05/29 Python
python中正则表达式与模式匹配
2019/05/07 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
如何将PySpark导入Python的放实现(2种)
2020/04/26 Python
使用html5 canvas绘制圆环动效
2019/06/03 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
Ruby如何实现动态方法调用
2012/11/18 面试题
主持人演讲稿范文
2013/12/28 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
党员教师群众路线个人整改措施
2014/10/28 职场文书
2016领导干部廉洁自律心得体会
2016/01/13 职场文书
深入理解python协程
2021/06/15 Python
python中的sys模块和os模块
2022/03/20 Python