一个函数或方法,它使用*args和**kwargs作为参数,这样使得它比较通用, 但有时候你想检查传递进来的参数是不是某个你想要的类型。可以使用函数签名来做验证

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

在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名。

获取函数签名及参数

使用标准库的signature方法,获取函数签名对象;通过函数签名的parameters属性,获取函数参数。

# 注意是小写的signature
from inspect import signaturedef 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'

python3 函数签名简介 验证函数参数相关推荐

  1. Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]

    1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...

  2. crossvalind函数 (交叉验证函数)

    crossvalind是cross-valindation的缩写,意即交叉检验. 常用的形式有:  ①Indices =crossvalind('Kfold', N, K)  ②[Train, Tes ...

  3. Py之matplotlib.pyplot:matplotlib.pyplot的plt.legend函数的简介、使用方法之详细攻略

    Py之matplotlib.pyplot:matplotlib.pyplot的plt.legend函数的简介.使用方法之详细攻略 目录 matplotlib.pyplot的plt.legend函数的简 ...

  4. Python之Pandas:pandas.read_csv()函数的简介、具体案例、使用方法详细攻略

    Python之Pandas:pandas.read_csv()函数的简介.具体案例.使用方法详细攻略 目录 read_csv()函数的简介 read_csv()函数的简介               ...

  5. 浅谈python函数签名

    函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方 ...

  6. JS通用表单验证函数

    Check.js   JS函数文件 /*  *--------------- 客户端表单通用验证CheckForm(oForm) -----------------  * 功能:通用验证所有的表单元素 ...

  7. python 自定义装饰器 来验证函数参数

    # -*- coding: utf-8 -*- # by dl from inspect import signature # 用来获取函数的一些信息# 自定义参数验证装饰器 def typeasse ...

  8. Python3 matplotlib的绘图函数subplot()简介

    Python3 matplotlib的绘图函数subplot()简介 一.简介 matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制 ...

  9. 爬虫-urllib简介urlopen函数重要参数学习

    1.urllib简介 urllib是Python中内置的最基本的网络请求库. 提供直接发送HTTP请求,接受处理HTTP响应的API. 2.urllib中包含模块 2.1 urllib.request ...

最新文章

  1. Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!
  2. MySQL太细碎了,我硬生生捋出了一条核心大主线!
  3. tf.keras.activations.relu 激活函数 示例
  4. SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
  5. OpenKruise:解放 DaemonSet 运维之路
  6. elastic-job 和 xxl-job 的对比
  7. java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
  8. linux gradle目录结构,android studio中,project和module的目录结构
  9. Qt之Ubuntu18.04安装(一)
  10. idea删除不用或者失效的jdk
  11. Halcon 注册说明
  12. CH32F103C8T6核心板三种程序下载方式简介
  13. Magento 自定义EMS FEDEX DHL UPS扩展 第三章
  14. 国产数据库 OceanBase 二次刷榜 TPC-C,7 亿 tpmC
  15. R 语言实战-Part 3 笔记
  16. 适合打游戏用的蓝牙耳机有哪些?吃鸡无延迟的蓝牙耳机推荐
  17. Keli5 打开Cypress CY7C68013A(51单片机)官方开发包例程
  18. WireShark案例分析
  19. 我在3G门户工作学到的9句话
  20. 简易爬虫--360图片爬取

热门文章

  1. android oppo 权限,OPPO Reno可尝鲜Android Q:教程如下
  2. 微服务架构 — 服务治理 — 服务限流、服务降级、服务熔断
  3. 用 Flask 来写个轻博客 (36) — 使用 Flask-RESTful 来构建 RESTful API 之五
  4. python3 爬淘女郎
  5. 如何基于OSS和MPS,快速搭建音视频文件上传服务?
  6. Hibernate简介2
  7. 实现无线AP无缝漫游
  8. ListView数据项隔行换色控制实现详解
  9. 菜鸟学习计划浅谈之Linux系统
  10. 好好说说Java中的常量池之Class常量池