对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学习笔记 下载
Feb 10 Python
Python Web开发模板引擎优缺点总结
May 06 Python
Python NumPy库安装使用笔记
May 18 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
python 中如何获取列表的索引
Jul 02 Python
Python读取实时数据流示例
Dec 02 Python
python数据库编程 ODBC方式实现通讯录
Mar 27 Python
keras的load_model实现加载含有参数的自定义模型
Jun 22 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python学习之时间包使用教程详解
Mar 21 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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.ini中文版
2006/10/09 PHP
使用PHP和XSL stylesheets转换XML文档
2006/10/09 PHP
简单实现php上传文件功能
2017/09/21 PHP
UI Events 用户界面事件
2012/06/27 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
jQuery获取浏览器中的分辨率实现代码
2013/04/23 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
js+canvas简单绘制圆圈的方法
2016/01/28 Javascript
vuejs如何配置less
2017/04/25 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
vue实现路由懒加载及组件懒加载的方式
2019/06/11 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
[02:52]DOTA2新手基础教程 米波
2014/01/21 DOTA
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
1 行 Python 代码快速实现 FTP 服务器
2018/01/25 Python
python爬虫爬取网页表格数据
2018/03/07 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
Python错误处理操作示例
2018/07/18 Python
python对日志进行处理的实例代码
2018/10/06 Python
详解Python二维数组与三维数组切片的方法
2019/07/18 Python
vscode调试django项目的方法
2020/08/06 Python
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
办公室保洁员岗位职责
2013/12/02 职场文书
购房协议书范本
2014/04/11 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
龙潭大峡谷导游词
2015/02/10 职场文书
比赛主持人开场白
2015/05/29 职场文书
亲戚关系证明
2015/06/24 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
Mysql如何实现不存在则插入,存在则更新
2022/03/25 MySQL
Nginx动静分离配置实现与说明
2022/04/07 Servers