对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 相关文章推荐
Windows下PyMongo下载及安装教程
Apr 27 Python
Python标准库defaultdict模块使用示例
Apr 28 Python
vscode 远程调试python的方法
Dec 01 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
Django使用Jinja2模板引擎的示例代码
Aug 09 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
Python如何输出百分比
Jul 31 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
python OpenCV学习笔记
Mar 31 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
一个odbc连mssql分页的类
2006/10/09 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
php批量更改数据库表前缀实现方法
2013/10/26 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
2015/12/31 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
JQuery 插件模板 制作jquery插件的朋友可以参考下
2010/03/17 Javascript
JavaScript获取多个数组的交集简单实例
2013/11/11 Javascript
JQuery解析HTML、JSON和XML实例详解
2014/03/29 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
一个JavaScript操作元素定位元素的实例
2014/10/29 Javascript
文字垂直滚动之javascript代码
2015/07/29 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
2016/11/28 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
Node.js 异步异常的处理与domain模块解析
2017/05/10 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
详解在Javascript中进行面向切面编程
2019/04/28 Javascript
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
使用python检测手机QQ在线状态的脚本代码
2013/02/10 Python
PyQt 线程类 QThread使用详解
2017/07/16 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
Python全栈之列表数据类型详解
2019/10/01 Python
python可视化实现KNN算法
2019/10/16 Python
Python集合操作方法详解
2020/02/09 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
财务负责人任命书
2014/06/06 职场文书
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python