对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 SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
May 06 Python
使用Python装饰器在Django框架下去除冗余代码的教程
Apr 16 Python
python将文本转换成图片输出的方法
Apr 28 Python
十条建议帮你提高Python编程效率
Feb 16 Python
python实现发送邮件功能代码
Dec 14 Python
Python循环结构的应用场景详解
Jul 11 Python
python实现PID算法及测试的例子
Aug 08 Python
python中with语句结合上下文管理器操作详解
Dec 19 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
Pycharm 2020.1 版配置优化的详细教程
Aug 07 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
初学CAKEPHP 基础教程
2009/11/02 PHP
PHP之短标签开启设置
2013/06/17 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
javascript操作数组详解
2014/12/17 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
JS基于封装函数实现的表格分页完整示例
2018/06/26 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
layui-laydate时间日历控件使用方法详解
2018/11/15 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
vue+element表格导出为Excel文件
2019/09/26 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
2020/04/26 Javascript
vue组件暴露和.js文件暴露接口操作
2020/08/11 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
python列表操作使用示例分享
2014/02/21 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
Html5实现移动端、PC端 刮刮卡效果
2016/06/30 HTML / CSS
英文版餐饮业求职信
2013/10/18 职场文书
法学毕业生自荐信
2013/11/13 职场文书
人事科岗位职责范本
2014/03/02 职场文书
合作协议书怎么写
2014/04/18 职场文书
关于环保的建议书
2014/05/12 职场文书
银行业务授权委托书
2014/10/10 职场文书
秋季运动会开幕词
2015/01/28 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
2015年学生会部门工作总结
2015/04/21 职场文书
团结主题班会
2015/08/13 职场文书
详解Go与PHP的语法对比
2021/05/29 PHP
关于nginx 实现jira反向代理的问题
2021/09/25 Servers