一、debug日志装饰器

代码块:

import time
import functoolsdef log_kind(kind):def add_log(fun):@functools.wraps(fun)def wrapper(*args,**kwargs):start_time = time.time()res = fun(*args,**kwargs)end_time = time.time()print('<%s>[%s] 函数名: %s, 运行时间: %.6f, 运行返回值结果: %d'%(kind,time.ctime(),fun.__name__,end_time - start_time,res))return resreturn wrapperreturn add_log@log_kind('debug')
def add(x,y):time.sleep(1)return x + yadd(1,2)

示例及运行结果:

二、编写装饰器required_types

题目描述:
编写装饰器required_types, 条件如下:
1). 当装饰器为@required_types(int,float)确保函数接收到的
每一个参数都是int或者float类型;
2). 当装饰器为@required_types(list)确保函数接收到的
每一个参数都是list类型;
3). 当装饰器为@required_types(str,int)确保函数接收到的每
一个参数都是str或者int类型;
4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类

代码块:

import functoolsdef required_types(*kinds):def required(fun):@functools.wraps(fun)def wrapper(*args,**kwargs):for i in args:if not isinstance(i,kinds):# print('TypeError:参数必须为',kinds)# breakraise TypeError('参数必须为%s,%s' %kinds)else:res = fun(*args,**kwargs)return resreturn wrapperreturn required@required_types(int,int)
def add(a,b):return a + bprint(add(1.2,2.0))

示例及运行结果:


当参数的类型为int型时,会有如下效果:

三、多个装饰器

代码块:

def decorator_a(fun):def inner_a(*args,**kwargs):print('Get in inner_a')return fun(*args,**kwargs)return inner_adef decorator_b(fun):def inner_b(*args,**kwargs):print('Get in inner_b')return fun(*args,**kwargs)return inner_b@decorator_b
@decorator_a
def f(x):print('Get in f')return x*2f(1)

示例及运行结果:

四、装饰器练习(添加、删除学生信息)

代码块:

import functools
import inspectlogin_tables = ['root','admin','westos']def is_admin(fun):@functools.wraps(fun)def wrapper(*args,**kwargs):#inspect.getcallargs返回一个字典,key值:形参 value值:对应的实参inspect_res = inspect.getcallargs(fun,*args,**kwargs)print('inspect的返回值: %s' %inspect_res)if inspect_res.get('name') == 'root':res = fun(*args,**kwargs)return reselse:print('Permission denied!')return wrapperdef login(fun):@functools.wraps(fun)def wrapper(*args,**kwargs):if args[0] in login_tables:res = fun(*args,**kwargs)return reselse:print('Error:无此用户')return wrapper@login
@is_admin
def add_student(name):print('添加学生信息')def del_student(name):print('删除学生信息')add_student('root')

示例及运行结果:

Python——装饰器(二)相关推荐

  1. python 装饰器 二 (装饰带参数的函数)

    #!/usr/bin/env python #_*_coding=utf-8_*_ #Author: xieyixue #mail: xyx_0410@163.com #Created Time: 2 ...

  2. 【python 8】python 装饰器

    文章目录 一.什么是 python 装饰器 二.装饰器的使用 三.装饰器类型 3.1 特性装饰器 @property 3.2 类装饰器 @classmethod 3.3 静态装饰器 @staticme ...

  3. python装饰器与闭包_Python 装饰器和闭包

    Python 装饰器和闭包 装饰器是 Python 中常见的语法糖,这篇文章讲了闭包和装饰器的原理,并且分析了函数中变量的作用域,以及尝试总结了常见的坑. 装饰器基础 首先来看看装饰器的定义:装饰器本 ...

  4. python装饰器-Python基础-20装饰器

    20.装饰器 20.1 函数基础知识 在Python中函数为一等公民,我们可以: 把函数赋值给变量 在函数中定义函数 在函数中返回函数 把函数传递给函数 20.1.1 把函数赋值给变量 在Python ...

  5. python 装饰器 参数-[Python]写个带参数的装饰器

    上篇文章 Python装饰器为什么难理解?从函数到装饰器一步一步介绍了Python装饰器的来由,不知你对装饰器理解了没有,强烈建议你自己动手写个装饰器应用到项目中加深理解.装饰器可以很简单,也可以很复 ...

  6. python装饰器原理-深刻理解python装饰器

    我们要完全理解python装饰器,不是很容易,主要归结有如下困难: 1. 关于函数"变量"(或"变量"函数)的理解 2. 关于高阶函数的理解 3. 关于嵌套函数 ...

  7. python装饰器原理-python装饰器的原理和使用

    一.最简单的装饰器 装饰器是python中很基础也很实用的一个特性.通过装饰器我们可以很方便地为一些函数添加相同的功能.我们以测量函数运行时间为例来讲一讲python装饰器的运行原理. 1.使用装饰器 ...

  8. python装饰器原理-简单了解python装饰器原理及使用方法

    这篇文章主要介绍了简单了解python装饰器原理及使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 如果你接触 Python 有一段时间了的话 ...

  9. python装饰器实例-python装饰器实例大详解

    原标题:python装饰器实例大详解 一.作用域 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我 ...

  10. python装饰器-python装饰器简介---这一篇也许就够了(推荐)

    Python装饰器(decorator)是在程序开发中经常使用到的功能,合理使用装饰器,能让我们的程序如虎添翼. 装饰器引入 初期及问题诞生 假如现在在一个公司,有A B C三个业务部门,还有S一个基 ...

最新文章

  1. ES5-13 对象属性遍历、this、callee、caller
  2. C语言中的二进制、八进制和十六进制的表示
  3. springcloud记录篇6-分布式配置中心
  4. dataframe groupby_详解pandas中的map、apply、applymap、groupby、agg.
  5. 提高网站速度|负载均衡
  6. 大学生创新创业大赛 项目申请书
  7. 2019深圳杯获奖论文_深圳杯数学建模A题获奖论文
  8. 数字化转型|利用现代技术和通信手段|改变企业为客户创造价值的方式
  9. 关于echarts中饼图设置颜色的方法
  10. 浮点数打印其实是个复杂的过程
  11. AES加解密算法详解
  12. 运输层----ARQ 协议 ---- 连续 ARQ 协议
  13. 设置input[type=number]不显示箭头
  14. 13.3 跳格子游戏
  15. 用户输入矩形的长和宽,计算其面积并输出,结果四舍五入,保留2位小数。
  16. 复旦计算机考研英语,我收集的近几年复旦计算机复试笔试题
  17. SAP-MM-PA精解分析系列之基本介绍(03) -组织架构(附加篇-后台配置)
  18. 小胖装机心得 之 耕升显卡造假易迅售后致谢
  19. qq超长头衔是怎么设置的,点进来你就知道
  20. 青龙面板京东库(4.6号更新)

热门文章

  1. security工作笔记008---springBoot springCloud中的security配置全解
  2. Android学习笔记---android平台中利用,SAX解析xml
  3. My97DatePicker 组件使用方法---My97DatePicker
  4. inception V4 与resnet
  5. VS2008文档自动生成
  6. 初学angularJS 个人总结 错误排除
  7. django 获取环境变量_python – django settings.py os.environ.get(“X”)没有获取正确的值...
  8. C语言除法浮点型和整形,浅谈C语言整型与浮点型转换
  9. python关键词提取源码,python实现textrank关键词提取
  10. Nginx 多域名多网站绑定及禁止IP访问