对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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
Python 异常处理实例详解
Mar 12 Python
最基础的Python的socket编程入门教程
Apr 23 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
Python 面试中 8 个必考问题
Nov 16 Python
python实现五子棋小游戏
Mar 25 Python
python tkinter实现界面切换的示例代码
Jun 14 Python
python Django的web开发实例(入门)
Jul 31 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
Python3 获取文件属性的方式(时间、大小等)
Mar 12 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
Mar 16 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
在win系统安装配置 Memcached for PHP 5.3 图文教程
2015/03/03 PHP
详解PHP实现异步调用的4种方法
2016/03/14 PHP
PHP yii实现model添加默认值的方法(两种方法)
2016/11/10 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
使用canvas实现仿新浪微博头像截取上传功能
2015/09/02 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
2018/09/07 jQuery
koa router 多文件引入的方法示例
2019/05/22 Javascript
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python 删除列表里所有空格项的方法总结
2018/04/18 Python
python中的变量如何开辟内存
2018/06/26 Python
pandas 选择某几列的方法
2018/07/03 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python中update的基本使用方法详解
2019/07/17 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
html5 canvas 使用示例
2010/10/22 HTML / CSS
英语专业毕业生自荐信
2013/10/28 职场文书
学习党课思想汇报
2013/12/29 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
教师群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
详细总结Python常见的安全问题
2021/05/21 Python
python使用opencv对图像添加噪声(高斯/椒盐/泊松/斑点)
2022/04/06 Python