python3 函数签名简介 验证函数参数
一个函数或方法,它使用*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 函数签名简介 验证函数参数相关推荐
- Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]
1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...
- crossvalind函数 (交叉验证函数)
crossvalind是cross-valindation的缩写,意即交叉检验. 常用的形式有: ①Indices =crossvalind('Kfold', N, K) ②[Train, Tes ...
- Py之matplotlib.pyplot:matplotlib.pyplot的plt.legend函数的简介、使用方法之详细攻略
Py之matplotlib.pyplot:matplotlib.pyplot的plt.legend函数的简介.使用方法之详细攻略 目录 matplotlib.pyplot的plt.legend函数的简 ...
- Python之Pandas:pandas.read_csv()函数的简介、具体案例、使用方法详细攻略
Python之Pandas:pandas.read_csv()函数的简介.具体案例.使用方法详细攻略 目录 read_csv()函数的简介 read_csv()函数的简介 ...
- 浅谈python函数签名
函数签名对象,表示调用函数的方式,即定义了函数的输入和输出. 在Python中,可以使用标准库inspect的一些方法或类,来操作或创建函数签名. 获取函数签名及参数 使用标准库的signature方 ...
- JS通用表单验证函数
Check.js JS函数文件 /* *--------------- 客户端表单通用验证CheckForm(oForm) ----------------- * 功能:通用验证所有的表单元素 ...
- python 自定义装饰器 来验证函数参数
# -*- coding: utf-8 -*- # by dl from inspect import signature # 用来获取函数的一些信息# 自定义参数验证装饰器 def typeasse ...
- Python3 matplotlib的绘图函数subplot()简介
Python3 matplotlib的绘图函数subplot()简介 一.简介 matplotlib下, 一个 Figure 对象可以包含多个子图(Axes), 可以使用 subplot() 快速绘制 ...
- 爬虫-urllib简介urlopen函数重要参数学习
1.urllib简介 urllib是Python中内置的最基本的网络请求库. 提供直接发送HTTP请求,接受处理HTTP响应的API. 2.urllib中包含模块 2.1 urllib.request ...
最新文章
- Spring Boot + EasyExcel 导入导出,好用到爆,可以扔掉 POI 了!
- MySQL太细碎了,我硬生生捋出了一条核心大主线!
- tf.keras.activations.relu 激活函数 示例
- SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
- OpenKruise:解放 DaemonSet 运维之路
- elastic-job 和 xxl-job 的对比
- java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
- linux gradle目录结构,android studio中,project和module的目录结构
- Qt之Ubuntu18.04安装(一)
- idea删除不用或者失效的jdk
- Halcon 注册说明
- CH32F103C8T6核心板三种程序下载方式简介
- Magento 自定义EMS FEDEX DHL UPS扩展 第三章
- 国产数据库 OceanBase 二次刷榜 TPC-C,7 亿 tpmC
- R 语言实战-Part 3 笔记
- 适合打游戏用的蓝牙耳机有哪些?吃鸡无延迟的蓝牙耳机推荐
- Keli5 打开Cypress CY7C68013A(51单片机)官方开发包例程
- WireShark案例分析
- 我在3G门户工作学到的9句话
- 简易爬虫--360图片爬取