对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基础教程之基本数据类型和变量声明介绍
Aug 29 Python
Python列表计数及插入实例
Dec 17 Python
Python 的描述符 descriptor详解
Feb 27 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
Python实现定时精度可调节的定时器
Apr 15 Python
Python 监测文件是否更新的方法
Jun 10 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
wxPython实现带颜色的进度条
Nov 19 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
字典算法实现及操作 --python(实用)
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
PHP开发入门教程之面向对象
2006/12/05 PHP
php curl_init函数用法
2014/01/31 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
2015/10/10 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
Laravel创建数据库表结构的例子
2019/10/09 PHP
用jQuery打造TabPanel效果代码
2010/05/22 Javascript
关于JavaScript中var声明变量作用域的推断
2010/12/16 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
jquery.cookie() 方法的使用(读取、写入、删除)
2013/12/05 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jquery实现平滑的二级下拉菜单效果
2015/08/26 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
js Canvas绘制圆形时钟效果
2017/02/17 Javascript
react native仿微信PopupWindow效果的实例代码
2017/08/07 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
Python类的专用方法实例分析
2015/01/09 Python
Python中元组,列表,字典的区别
2017/05/21 Python
详解Python里使用正则表达式的ASCII模式
2017/11/02 Python
python中的字典操作及字典函数
2018/01/03 Python
Django model select的多种用法详解
2019/07/16 Python
Python如何读取、写入JSON数据
2020/07/28 Python
中国京东和泰国中央集团合资的网站:JD CENTRAL
2020/08/22 全球购物
上海方立数码笔试题
2013/10/18 面试题
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
计算机应届毕业生自荐信范文
2014/02/23 职场文书
小学生环保演讲稿
2014/04/25 职场文书
学校与家长安全责任书
2014/07/23 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
2016七夕情人节感言
2015/12/09 职场文书
2019广播稿怎么写
2019/04/17 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
python制作图形界面的2048游戏, 基于tkinter
2021/04/06 Python
Mysql如何查看是否使用到索引
2022/12/24 MySQL