对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实现判断一行代码是否为注释的方法
May 23 Python
Python 使用PIL中的resize进行缩放的实例讲解
Aug 03 Python
python调用webservice接口的实现
Jul 12 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
python元组和字典的内建函数实例详解
Oct 22 Python
TensorFlow:将ckpt文件固化成pb文件教程
Feb 11 Python
Python ini文件常用操作方法解析
Apr 26 Python
Pandas实现一列数据分隔为两列
May 18 Python
使用Python FastAPI构建Web服务的实现
Jun 08 Python
浅析Python 责任链设计模式
Sep 11 Python
Python+MySQL随机试卷及答案生成程序的示例代码
Feb 01 Python
pycharm无法导入lxml的解决办法
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连接数据库代码应用分析
2011/05/29 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
jquery实现数字输入框
2017/02/22 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
点击按钮弹出模态框的一系列操作代码实例
2019/03/29 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
微信小程序点击列表跳转到对应详情页过程解析
2019/09/26 Javascript
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
python 美化输出信息的实例
2018/10/15 Python
Python3的高阶函数map,reduce,filter的示例详解
2019/07/23 Python
PyQt+socket实现远程操作服务器的方法示例
2019/08/22 Python
pytorch构建多模型实例
2020/01/15 Python
pytorch中使用cuda扩展的实现示例
2020/02/12 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
事业单位请假制度
2014/01/13 职场文书
高中生期末评语
2014/01/28 职场文书
电子银行营销方案
2014/02/22 职场文书
寄语是什么意思
2014/04/10 职场文书
态度决定一切演讲稿
2014/05/20 职场文书
机械系毕业生求职信
2014/05/28 职场文书
学法用法心得体会(2016推荐篇)
2016/01/21 职场文书
餐饮行业关注的9大营销策略
2019/08/26 职场文书
Ajax请求超时与网络异常处理图文详解
2021/05/23 Javascript
Node.js实现爬取网站图片的示例代码
2022/04/04 NodeJs