本文实例讲述了Python使用修饰器执行函数的参数检查功能。分享给大家供大家参考,具体如下:

参数检查:1. 参数的个数;2. 参数的类型;3. 返回值的类型。
考虑如下的函数:
import html
def make_tagged(text, tag):
return '<{0}>{1}</{0}>'.format(tag, html.escape(text))
显然我们希望传递进来两个参数,且参数类型/返回值类型均为str,再考虑如下的函数:
def repeat(what, count, separator) : return ((what + separator)*count)[:-len(separator)]
显然我们希望传递进来三个参数,分别为str,int,str类型,可对返回值不做要求。
那么我们该如何实现对上述参数要求,进行参数检查呢?
import functools
def statically_typed(*types, return_type=None):
def decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
if len(args) > len(types):
raise ValueError('too many arguments')
elif len(args) < len(types):
raise ValueError('too few arguments')
for i, (type_, arg) in enumerate(zip(types, args)):
if not isinstance(type_, arg):
raise ValueError('argument {} must be of type {}'.format(i, type_.__name__))
result = func(*args, **kwargs)
if return_type is not None and not isinstance(result, return_type):
raise ValueError('return value must be of type {}'.format(return_type.__name__))
return wrapper
return decorator
这样,我们便可以使用修饰器模板执行参数检查了:
@statically_typed(str, str, return_type=str)
def make_tagged(text, tag):
return '<{0}>{1}</{0}>'.format(tag, html.escape(text))
@statically_typed(str, int, str)
def repeat(what, count, separator):
return ((what + separator)*count)[:-len(separator)]
注:从静态类型语言(C/C++、Java)转入 Python 的开发者可能比较喜欢用修饰器对函数的参数及返回值执行静态类型检查,但这样做会增加 Python 程序在运行期的开销,而编译型语言则没有这种运行期开销(Python 是解释型语言)。
更多关于Python相关内容可查看本站专题:《Python函数使用技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 修饰器
# 函数
# 参数
# 检查
# Python使用修饰器进行异常日志记录操作示例
# Python函数式编程Filter传参方式
# Python函数式编程实现登录注册功能
# Python函数式编程实例详解
# 使用Python的toolz库开始函数式编程的方法
# Python函数式编程艺术之修饰器运用场景探索
# 返回值
# 进阶
# 操作技巧
# 相关内容
# 均为
# 数据结构
# 给大家
# 这样做
# 便可
# 不做
# 分别为
# 该如何
# 更多关于
# 比较喜欢
# 可对
# 所述
# 程序设计
# 使用技巧
# 讲述了
# tag
相关文章:
山东云建站价格为何差异显著?
建站之星如何快速更换网站模板?
建站之星如何保障用户数据免受黑客入侵?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何获取PHP WAP自助建站系统源码?
小建面朝正北,A点实际方位是否存在偏差?
西安专业网站制作公司有哪些,陕西省建行官方网站?
制作证书网站有哪些,全国城建培训中心证书查询官网?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
如何快速上传建站程序避免常见错误?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
成都响应式网站开发,dw怎么把手机适应页面变成网页?
,想在网上投简历,哪几个网站比较好?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
定制建站流程解析:需求评估与SEO优化功能开发指南
如何用搬瓦工VPS快速搭建个人网站?
b2c电商网站制作流程,b2c水平综合的电商平台?
建站之星如何通过成品分离优化网站效率?
建站主机选择指南:服务器配置与SEO优化实战技巧
香港服务器建站指南:免备案优势与SEO优化技巧全解析
建站之星官网登录失败?如何快速解决?
建站之星下载版如何获取与安装?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
七夕网站制作视频,七夕大促活动怎么报名?
微信推文制作网站有哪些,怎么做微信推文,急?
如何设计高效校园网站?
香港服务器部署网站为何提示未备案?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何选择靠谱的建站公司加盟品牌?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
C++时间戳转换成日期时间的步骤和示例代码
宁波自助建站系统如何快速打造专业企业网站?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
建站ABC备案流程中有哪些关键注意事项?
ui设计制作网站有哪些,手机UI设计网址吗?
建站之星安装路径如何正确选择及配置?
完全自定义免费建站平台:主题模板在线生成一站式服务
C#怎么创建控制台应用 C# Console App项目创建方法
高防服务器租用指南:配置选择与快速部署攻略
中山网站制作网页,中山新生登记系统登记流程?
如何在橙子建站中快速调整背景颜色?
网站制作公司,橙子建站是合法的吗?
建站之星代理如何优化在线客服效率?
*请认真填写需求信息,我们会在24小时内与您取得联系。