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】装饰器相关推荐

  1. python之路---15 装饰器

    三十四.装饰器 1.开闭原则: 对功能的扩展开放,对代码的修改是封闭的(不可修改的)    目的:在目标函数前或后插入一段新的代码,不改变源代码 2.装饰器的通用语法 3.多个装饰器修饰同一个函数 4 ...

  2. python实现计时器(装饰器)

    1, Python时间装饰器_BurningSilence的博客-CSDN博客_python 时间装饰器 from functools import wraps import time# time装饰 ...

  3. python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解

    我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...

  4. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  5. python return用法_初学Python要了解什么 装饰器知识汇总有哪些

    初学Python要了解什么?装饰器知识汇总有哪些?在Python学习过程中,有多种方法对函数和类进行加工,相对于其它方式,装饰器语法简单,代码可读性高.因此,装饰器在Python项目中有广泛的应用,比 ...

  6. python log函数_python装饰器的使用

    1. 装饰者模式 装饰者模式是常用的软件设计模式之一.通过此设计模式,我们能够在不修改任何底层代码情况下,给已有对象赋予新的职责.python中可以用装饰器简单地实现装饰者模式. 1.1 将函数作为参 ...

  7. [转载] Python学习笔记——用装饰器decorator和Memoization记忆化提高效率,原理讲清楚了

    参考链接: 在Python中使用装饰器进行记忆 Python学习笔记--用装饰器decorator和Memoization记忆化提高效率 装饰器Memoization记忆化运用`functools`中 ...

  8. itext生成pdf paragraph 自动换行_reportlab高级制作多格式PDF和python的class和装饰器复习

    1 说明 1.1 reportlab高级制作多格式PDF:即包含文字.表格.柱状图. 1.2 复习python的class和装饰器的高级基础知识. 1.3 列表转换字符串.读取txt文件等python ...

  9. Python中的decorator装饰器使用方法

    装饰器的运用是Python编程中的一项高级技巧,这里由浅入深,整理了12步入门Python中的decorator装饰器使用方法,需要的朋友可以参考下 装饰器(decorator)是一种高级Python ...

最新文章

  1. linux清屏命令_linux下的7个常用命令的基本使用
  2. android字符串获取数字索引,从字符串中提取特定数据(Extract specific data from a string)...
  3. HDU 1257 最少拦截系统
  4. af_netlink_2、netlink简介
  5. slack 团队协作平台
  6. 高中信息技术python知识点_高中信息技术《Python语言》模块试卷
  7. Linux驱动开发-编写W25Q64(Flash)驱动
  8. 2023年天津仁爱学院专升本报名确认缴费考试流程
  9. 第十二周项目四----利用遍历思想求解图问题之6最短路径
  10. 用计算机撩人套路,给大家一些撩人的套路情话~
  11. 原来普洱茶还有预防头痛,减轻体重,缓解压力和失眠的作用,而且是年份久的普洱茶效果好
  12. 如何衡量和提高推荐计划的投资回报率
  13. UML统一建模语言第7章 状态机图和活动图课后习题
  14. birt 报表与润乾报表对比
  15. “泰迪杯”挑战赛 - 通过数据挖掘技术实现道路缺陷自动识别
  16. 北大邮箱收件服务器,北京大学网络服务
  17. 如何给模型加入先验知识?
  18. 听说你还在花钱从网上买 PPT 模板?
  19. Python:根据excel中单元格的内容自动批量修改excel名称
  20. 机器学习——如何优化模型(上)

热门文章

  1. 摘要:ASP.NET的路由
  2. 怎样定义网页里的关键字关键词
  3. mac下git与github简单使用
  4. SQL Update 语句中使用别名
  5. Pycharm的.py文件的导入
  6. 【正一专栏】世界杯十六强猜想
  7. Hadoop性能调优概要说明
  8. Word中插入参考文献及其引用并能够自动更新的方法
  9. CentOS5.4下安装和配置Apache、PHP、MySql、PHPMyAdmin
  10. Move from SQL to SOQL