【python之路24】装饰器
1、装饰器的应用场景
通常IT公司的程序开发是分工的,例如某公司某个部门负责底层函数的开发,另一个部门利用其函数实现高级功能,那么如果负责底层开发的函数需要改动,一般来说不会直接在函数上进行修改,通常利用装饰器在函数外部进行修改。
2、装饰器之@的用法
#!usr/bin/env python # -*- coding:utf-8 -*- #装饰器 def outer(func):func()return lambda :123#1、首先执行outer函数,并且将其下面的函数名作为参数传给outer #2、将outer的返回值重新赋值给f1,即f1 = outer的返回值 @outer def f1():print("F1")re = f1() print(re)
3、装饰器的主要作用:原函数不变的情况下,可以在函数的前面或后面增加其功能。
下面的代码:
#!usr/bin/env python # -*- coding:utf-8 -*- def outer(func):def inner1():print('start')print('start')re = func()print('end')print('end')return rereturn inner1def f1():print('F1')f1 = outer(f1) f1()
上面的代码等价于装饰器:
#!usr/bin/env python # -*- coding:utf-8 -*- def outer(func):def inner1():print('start')print('start')re = func()print('end')print('end')return rereturn inner1 @outer def f1():print('F1')f1()
执行过程如下图:
4、含有两个参数的装饰器
#!usr/bin/env python # -*- coding:utf-8 -*- #含有两个参数的函数 def outer(func):def inner(a1,a2):print('开始计算.......')re = func(a1,a2)print('计算完毕。')return rereturn inner @outer def add(a1,a2):print("复杂的计算")return a1+a2r = add(1,3) print(r)
5、任意个参数的装饰器
#!usr/bin/env python # -*- coding:utf-8 -*-def outer(func):def inner(*args,**kwargs):print("开始计算......")r = func(*args,**kwargs)#可以为任何参数,python会自动处理参数print("计算结束。。")return rreturn inner @outer def f1(a1,a2):return a1+a2 @outer def f2(a1,a2,a3):return a1+a2+a3 @outer def f3(a1):return a1+1r1 = f1(10,20) r2 = f2(10,20,30) r3 = f3(10) print(r1,r2,r3)
6、一个函数可以拥有多个装饰器,多个装饰器从上到下执行,例如:
#!usr/bin/env python # -*- coding:utf-8 -*- #一个函数可以拥有多个装饰器 def outer_0(func):def inner(*args,**kwargs):print(3.5)r = func(*args,**kwargs)return rreturn inner def outer(func):def inner(*args,**kwargs):print("开始计算......")r = func(*args,**kwargs)#可以为任何参数,python会自动处理参数print("计算结束。。")return rreturn inner @outer_0 @outer def f1(a1,a2):return a1+a2 @outer def f2(a1,a2,a3):return a1+a2+a3 @outer def f3(a1):return a1+1r1 = f1(10,20) print(r1)# 结果输出: # 3.5 # 开始计算...... # 计算结束。。 # 30
转载于:https://www.cnblogs.com/sunshuhai/p/6389019.html
【python之路24】装饰器相关推荐
- python之路---15 装饰器
三十四.装饰器 1.开闭原则: 对功能的扩展开放,对代码的修改是封闭的(不可修改的) 目的:在目标函数前或后插入一段新的代码,不改变源代码 2.装饰器的通用语法 3.多个装饰器修饰同一个函数 4 ...
- python实现计时器(装饰器)
1, Python时间装饰器_BurningSilence的博客-CSDN博客_python 时间装饰器 from functools import wraps import time# time装饰 ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- python return用法_初学Python要了解什么 装饰器知识汇总有哪些
初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...
- python log函数_python装饰器的使用
1. 装饰者模式 装饰者模式是常用的软件设计模式之一.通过此设计模式,我们能够在不修改任何底层代码情况下,给已有对象赋予新的职责.python中可以用装饰器简单地实现装饰者模式. 1.1 将函数作为参 ...
- [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了
参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...
- itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习
1 说明 1.1 reportlab高级制作多格式PDF:即包含文字.表格.柱状图. 1.2 复习python的class和装饰器的高级基础知识. 1.3 列表转换字符串.读取txt文件等python ...
- Python中的decorator装饰器使用方法
装饰器的运用是Python编程中的一项高级技巧,这里由浅入深,整理了12步入门Python中的decorator装饰器使用方法,需要的朋友可以参考下 装饰器(decorator)是一种高级Python ...
最新文章
- linux清屏命令_linux下的7个常用命令的基本使用
- android字符串获取数字索引,从字符串中提取特定数据(Extract specific data from a string)...
- HDU 1257 最少拦截系统
- af_netlink_2、netlink简介
- slack 团队协作平台
- 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
- Linux驱动开发-编写W25Q64(Flash)驱动
- 2023年天津仁爱学院专升本报名确认缴费考试流程
- 第十二周项目四----利用遍历思想求解图问题之6最短路径
- 用计算机撩人套路,给大家一些撩人的套路情话~
- 原来普洱茶还有预防头痛,减轻体重,缓解压力和失眠的作用,而且是年份久的普洱茶效果好
- 如何衡量和提高推荐计划的投资回报率
- UML统一建模语言第7章 状态机图和活动图课后习题
- birt 报表与润乾报表对比
- “泰迪杯”挑战赛 - 通过数据挖掘技术实现道路缺陷自动识别
- 北大邮箱收件服务器,北京大学网络服务
- 如何给模型加入先验知识?
- 听说你还在花钱从网上买 PPT 模板?
- Python:根据excel中单元格的内容自动批量修改excel名称
- 机器学习——如何优化模型(上)