函数签名对象,表示调用函数的方式,即定义了函数的输入和输出。

在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'

最新文章

  1. x01.Tetris: 俄罗斯方块
  2. webpack-vue搭建,部署到后端
  3. BZOJ 3942: [Usaco2015 Feb]Censoring
  4. 学习Python的第一课(简单的单元测试)
  5. http协议本身能获取客户端Mac地址问题
  6. PHP学习笔记(2) - 对PHP的印象
  7. 在Myeclipse中用Java语言操作mysql数据库
  8. CentOS下使用命令行Web浏览器Links
  9. 处理SQL Server中的重复行
  10. QT:图形的描画(折线,柱状图,多边形)
  11. Dubbo 源码分析 - 集群容错之 Router
  12. JavaScript的内置对象(Global对象)
  13. Luogu 3424 [POI2005]SUM-Fibonacci Sums
  14. 使用pandas,7行代码实现朴素贝叶斯
  15. seek()方法的使用
  16. Daily Scrum (2015/10/28)
  17. 【python】vscode python环境配置
  18. swift 触摸与手势
  19. 12.Proxy
  20. 让Firefox支持offsetX、offsetY

热门文章

  1. 必应词典案例分析——个人博客作业week3
  2. 《Linux内核设计与实现》读书笔记 18
  3. Linux内核分析——第三章 进程管理
  4. XMLHttpRequest详解
  5. Entity Framwork学习笔记
  6. Jquery 组 checkbox全选checkbox
  7. K3CLOUD替代方案
  8. Linux基础学习(9)--文件系统管理
  9. ceph 安装ceph问题汇总
  10. bzoj 2599: [IOI2011]Race (点分治 本地过了就是过了.jpg)