广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中的函数参数类型检查
  • 342
分享到

Python中的函数参数类型检查

Python函数函数参数类型检查Python函数参数 2022-12-19 12:12:31 342人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录python函数参数类型检查下面我们用装饰器来实现总结Python函数参数类型检查 有一个很经典的笑话: 三个月之前,只有我和上帝知道这代码是干什么的。 现在,只有上帝知道了。

Python函数参数类型检查

有一个很经典的笑话:

三个月之前,只有我和上帝知道这代码是干什么的。

现在,只有上帝知道了。

在Python中,不知道函数参数类型是一个很正常的事情,特别是在一个大项目里。

我见过有些项目里,每一个函数体的前十几行都在检查参数类型,这实在是太麻烦了。而且一旦参数有改动,这部分也需要改动。

下面我们用装饰器来实现

函数参数的强制类型检查。

首先,这个装饰器,要接受类型参数,和指定函数参数的类型参数。也就是一个list和一个dict

from functools import wraps

def typeassert(*type_args, **type_kwargs):
    def decorate(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)
        return wrapper
    return decorate

@wraps(func)的作用请看我的另一篇

那么,接下来,在装饰器中,我们需要获取函数参数列表,并且要和类型参数表映射。

这要借助Python的一个标准库——inspect 这个库一般用于Python代码调试

from inspect import signature
from functools import wraps

def typeassert(*type_args, **type_kwargs):
    def decorate(func):
        sig = signature(func)
        bound_types = sig.bind_partial(*type_args, **type_kwargs).arguments

        @wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)
        return wrapper
    return decorate

上面的代码中,我们使用inspect中的signature方法获取了func的Signature对象,然后使用bind_partial方法创建了(*type_args, **type_kwargs)到func参数的映射(也就是一个字典)。

接下来就简单了,我们只需要再获取(*args, **kwargs)的类型,使用isintance函数进行比较就好。

from inspect import signature
from functools import wraps

def typeassert(*type_args, **type_kwargs):
    def decorate(func):
        sig = signature(func)
        bound_types = sig.bind_partial(*type_args, **type_kwargs).arguments

        @wraps(func)
        def wrapper(*args, **kwargs):
            bound_values = sig.bind(*args, **kwargs)
            for name, value in bound_values.arguments.items():
                if name in bound_types:
                    if not isinstance(value, bound_types[name]):
                        raise TypeError('Argument {} must be {}'.fORMat(name, bound_types[name]))
            return func(*args, **kwargs)
        return wrapper
    return decorate

运行如下代码

@typeassert(int, int)
def add(x, y):
    return x+y

print(add("u", 2))

能看到报错如下

Traceback (most recent call last):
  File "c:\Users\Chen\Desktop\typeassert.py", line 32, in <module>
    print(add("u", 2))
  File "c:\Users\Chen\Desktop\typeassert.py", line 22, in wrapper
    'Argument {} must be {}'.format(name, bound_types[name])
TypeError: Argument x must be <class 'int'>

很贴心的提醒了我们哪一个参数应该是什么类型。

你甚至可以自己改动这个装饰器,让它还能告诉你传进去了什么错误参数(特别是写爬虫的时候,参数很难掌握,一旦报错,还得重跑一遍才知道为什么。)

你也可以指定某一个参数的类型,譬如

@typeassert(int, z=str)
def display(x, y, z):
    print(x, y, z)

这时你会发现,y的类型就像原生的Python函数一样,什么都行。而x必须是int,z必须是str。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Python中的函数参数类型检查

本文链接: https://www.lsjlt.com/news/175208.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中的函数参数类型检查
    目录Python函数参数类型检查下面我们用装饰器来实现总结Python函数参数类型检查 有一个很经典的笑话: 三个月之前,只有我和上帝知道这代码是干什么的。 现在,只有上帝知道了。 ...
    99+
    2022-12-19
    Python函数 函数参数类型检查 Python函数参数
  • Python中函数的参数类型详解
    目录1、Python的函数参数的类型2、Python的必传参数3、关键字参数4、默认参数5、不定长参数1、Python的函数参数的类型 必传参数:调用函数时必须传入的参数,函数定义时...
    99+
    2022-11-11
  • Python中函数的参数类型实例分析
    今天小编给大家分享一下Python中函数的参数类型实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、Python的函...
    99+
    2023-07-02
  • 总结Python函数参数的六种类型
    目录一、函数的单参数传递二、多参数传递三、关键字参数四、缺省参数五、不定长参数 - 元组六、不定长参数 - 字典前言: Python函数之所以很好用,还有一点就的能传递参数实现不同场...
    99+
    2022-11-13
  • Python---限定函数参数的类型及默
    python作为一门动态语言,在使用变量之前是不需要进行定义,而是通过动态绑定的方法将变量绑定为某种类型。这样做为我们使用变量时提供了方便,但有时也给我们使用变量时造成了一定的困扰,例如在使用变量时不知道变量的类型,使用函数时不知...
    99+
    2023-01-31
    函数 参数 类型
  • python函数参数类型及其顺序
    根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY、POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、KEYWORD_ONLY...
    99+
    2023-01-30
    函数 顺序 参数
  • python函数怎么接收不同类型的参数
    本文小编为大家详细介绍“python函数怎么接收不同类型的参数”,内容详细,步骤清晰,细节处理妥当,希望这篇“python函数怎么接收不同类型的参数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。说明在定义函数时,...
    99+
    2023-06-30
  • python如何设定函数传参类型
    在python中设定函数传参类型的方法关键字参数关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。def fun(name, age):print(name + '今年{}了'.format(age))fun(age=...
    99+
    2022-10-08
  • php函数参数类型有哪些
    php中函数的参数类型有默认参数、可变参数和遗漏参数三种默认参数php中默认参数是指在声明函数时的赋值参数,默认参数一般在函数的最后面,调用默认参数时可以不传递参数。可变参数php中可变参数是指一个函数有多个可变数目的参数,一般使用func...
    99+
    2022-10-22
  • Python中有哪些参数类型
    本篇文章为大家展示了Python中有哪些参数类型,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网站均...
    99+
    2023-06-14
  • Python中类型检查的详细介绍
    前言 大家都知道Python 是一门强类型、动态类型检查的语言。所谓动态类型,是指在定义变量时,我们无需指定变量的类型,Python 解释器会在运行时自动检查。 与静态类型语言(如 C 语言)相比,这不仅仅...
    99+
    2022-06-04
    详细介绍 类型 Python
  • 【Python】函数进阶 ① ( 函数返回多个返回值 | 函数参数传递类型简介 | 位置参数 | 关键字参数 )
    文章目录 一、函数返回多个返回值二、函数参数传递类型1、位置参数2、关键字参数 一、函数返回多个返回值 在函数中 , 如果要 返回 多个返回值 , 可以 在 return ...
    99+
    2023-09-04
    python 开发语言 函数多返回值 位置参数 关键字参数 原力计划
  • python中的参数类型匹配提醒
    目录python参数类型匹配提醒Python函数参数匹配笔记位置匹配关键字匹配默认值传递任意数量参数传递的参数是元组传递任意数量键值对参数传递的参数是字典表总结python参数类型匹...
    99+
    2022-12-17
    python参数 参数类型匹配提醒 python参数类型匹配
  • Python如何使用type()函数查看数据的类型
    目录使用type()查看数据的类型使用type来定义类我们先来看一张图仔细观察我们上代码测试一下使用type()查看数据的类型 在Python中, 可以使用type()类型来查看数据...
    99+
    2022-11-11
  • Golang函数的map类型参数应用技巧
    Golang是一门高效、安全、易于维护的编程语言,越来越多的开发者开始使用它。在Go语言中,函数参数可以是任何类型,包括map类型。本文将介绍一些Golang函数中使用map类型参数的技巧,帮助开发者更好地利用Golang的功能特性进行开发...
    99+
    2023-05-17
    函数 Golang map类型
  • python参数类型有哪些
    python中参数的类型:1.必选参数;2.默认参数;3.可变参数;4.关键字参数;python中参数的类型有以下几种必选参数python中必选参数是指定义必选参数后,每次调用都需要对参数进行赋值,否则将报错。默认参数python中默认参数...
    99+
    2022-10-20
  • Python函数中的参数匹配模型是什么
    今天就跟大家聊聊有关Python函数中的参数匹配模型是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Python函数参数匹配模型任意参数 *当我们的函数接收参数为任意个,或者不能...
    99+
    2023-06-02
  • python函数的默认参数请勿定义可变类型详解
    目录函数的默认参数请勿定义可变类型可变类型和不可变类型定义可变类型会有什么问题?导致的原因解决方法关于可变类型作为默认参数时的注意点测试:将可变类型列表换为字典测试:来个不可变类型字...
    99+
    2022-11-13
  • Python 查看数据的类型
    机器学习记录 在 Python 中,有几种方式可以查看一个对象的数据类型: 1. 使用 type() 直接使用 type() 函数可以查看对象的类型: >>> type(1) >>> type([])...
    99+
    2023-08-31
    python java 开发语言
  • python函数的参数
    书写一个函数def  power(x):    return x * x对于power(x)函数,参数x就是一个位置参数,当我们调用power(x)函数时,必须传入有且仅有一个参数xpower(5)power()也是内置函数,用法power...
    99+
    2023-01-31
    函数 参数 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作