对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 相关文章推荐
haskell实现多线程服务器实例代码
Nov 26 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
python实现用户答题功能
Jan 17 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
详解python的sorted函数对字典按key排序和按value排序
Aug 10 Python
Python中作用域的深入讲解
Dec 10 Python
python使用opencv实现马赛克效果示例
Sep 28 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
谈谈python垃圾回收机制
Sep 27 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
php二维码生成
2015/10/19 PHP
简述php环境搭建与配置
2016/12/05 PHP
phpstudy后门rce批量利用脚本的实现
2019/12/12 PHP
javascript实现TreeView 无刷新展开的实例代码
2013/07/13 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
JavaScript判断浏览器类型的方法
2015/02/10 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
JS与jQ读取xml文件的方法
2015/12/08 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
Angular.js中window.onload(),$(document).ready()的写法浅析
2017/09/28 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
JS实现移动端在线签协议功能
2019/08/22 Javascript
vue路由缓存的几种实现方式小结
2020/02/02 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
vue键盘事件点击事件加native操作
2020/07/27 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
python实现发送邮件功能
2017/07/22 Python
python利用标准库如何获取本地IP示例详解
2017/11/01 Python
Python3.5内置模块之random模块用法实例分析
2019/04/26 Python
一款利用html5和css3实现的3D立方体旋转效果教程
2016/04/26 HTML / CSS
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
村官学习十八大感想
2014/01/15 职场文书
文明寄语大全
2014/04/11 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
2015政治思想表现评语
2015/03/25 职场文书
关于 Python json中load和loads区别
2021/11/07 Python
redis的list数据类型相关命令介绍及使用
2022/01/18 Redis