IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【pyhton】<装饰器>——个人理解 -> 正文阅读

[Python知识库]【pyhton】<装饰器>——个人理解

装饰器详解
一、背景

基于python中一切皆对象的思想,其通常作为函数的函数类型出现。

二、关于函数
函数有以下特性:

1、可以在其中定义另一个函数;
2、可以将其作为参数传递;
3、可以将其作为返回值返回;

函数也是作为对象存在的。

三、语法糖

在计算机科学中,可以使得编程语言更加容易的表达一个操作的语法,使得程序员代码变得具有可读性,使得操作变得更加的清晰、方便。

****注:装饰器是一种语法糖。

四、装饰器类型

装饰器可大致分为以下几类:

1)无参数的装饰器;

2)带参装饰器;

3)类装饰器;

4)装饰类方法;

五、装饰器意义

装饰器可以让其他函数代码在无需做任何代码变动的前提下,提供额外的功能。
装饰器通常用于有切面需求的场景下,例如:
插入日志、性能测试、事务处理、缓存、权限校验等场景;
可以通过装饰器抽离出大量与函数本身无关的大量代码并加以重用,提高代码复用率。

六、简单实现

此处实现一个简单的装饰器,用于做代码调试打印日志功能:

import time
'''
简单装饰器,打印日志
'''
def My_Debug(func):
    def show(*args,**kw):
        print('开始函数:{}'.format(func.__name__))
        #函数真正执行部分
        time1=time.time()
        print('执行结果:{}'.format(func(*args,**kw)))
        time2=time.time()
        print('结束函数:{}'.format(func.__name__))
        print('执行耗时:{}'.format(time2-time1))
    return show

'''
带参装饰器
'''
def My_Debug2(str,contry):
    def funcc(func):
        def show2(*args,**kw):
            print('装饰器2开始\n','-------------')
            if contry=='输出':
                print(str)
            if contry=='反转':
                print(''.join(reversed(str)))
            print('执行结果:{}'.format(func(*args, **kw)))
            print('装饰器2结束\n', '-------------')

        return show2
    return funcc

@My_Debug2('12345','反转')
@My_Debug
def myprint(str):
    time.sleep(5)
    return len(str)

if __name__=='__main__':
    str='123456'
    myprint(str)

代码注释完整,不做赘述。可以直接复制本地调试。

七、关于执行顺序

关于装饰器的执行顺序,按照上面代码作为讲解。首先需要知道,装饰器是就近先装饰的,意思是上述代码My_Debug先装饰函数myprint,然后由My_Debug2装饰函数体。但是运行中可看到My_Debug2装饰器先执行,My_Debug后执行。这种现象的解释为:装饰器是由内向外逐层装饰,而执行过程为由外向内逐层执行。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-06 12:11:29  更:2021-10-06 12:13:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:17:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码