对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 02 Python
python进阶教程之函数参数的多种传递方法
Aug 30 Python
全面解析Python的While循环语句的使用方法
Oct 13 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
3个用于数据科学的顶级Python库
Sep 29 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
Python字典底层实现原理详解
Dec 18 Python
详解Python的三种拷贝方式
Feb 11 Python
python识别验证码的思路及解决方案
Sep 13 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python3 kubernetes api的使用示例
Jan 12 Python
python文件目录操作之os模块
May 08 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
2006/12/06 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
深入理解PHP JSON数组与对象
2016/07/19 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
封装的原生javascript弹出层代码
2010/09/24 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
js左右弹性滚动对联广告代码分享
2014/02/19 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
2015/09/19 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
Python 硬币兑换问题
2019/07/29 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python函数__new__及__init__作用及区别解析
2020/08/31 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
python解包概念及实例
2021/02/17 Python
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
中文系师范生自荐信
2013/10/01 职场文书
成龙洗发水广告词
2014/03/14 职场文书
勤俭节约倡议书
2014/04/14 职场文书
市场营销工作计划书
2014/05/06 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
保管员岗位职责
2015/02/14 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
python基础之while循环语句的使用
2021/04/20 Python
如何利用React实现图片识别App
2022/02/18 Javascript
Redis批量生成数据的实现
2022/06/05 Redis