• 函数之装饰器


    装饰器的本质:闭包函数

    装饰器的功能:就是在不改变原函数调用方式的情况下,在这个函数的前后加上扩展功能

    def timer(func):
        def inner(a):
            start = time.time()
            func(a)
            print(time.time() - start)
        return inner
    
    @timer
    def func1(a):
        print(a)
    
    func1(1)
    带参数的装饰器

    装饰器的开放封闭原则:

            1、对扩展是开放的

            2、对修改是封闭的

    装饰器的主要功能:就是在不改变函数调用方式的基础上在函数前、后添加功能

    装饰器的固定方式

    def timer(func):
        def inner(*args,**kwargs):
            '''执行函数之前要做的'''
            re = func(*args,**kwargs)
            '''执行函数之后要做的'''
            return re
        return inner
    装饰器的固定方式

    带参数的装饰器 

    F = False
    def outer(flag):
        def wrapper(func):
            def inner(*args,**kwargs):
                if flag:
                    print('before')
                    ret = func(*args,**kwargs)
                    print('after')
                else:
                    ret = func(*args, **kwargs)
                return ret
            return inner
        return wrapper
    
    @outer(F)  #-->@wrapper  -->hahaha = wrapper(hahaha)  #-->hahaha == inner
    def hahaha():
        print('hahaha')
    
    @outer(F)   #shuangww = outer(shuangww)
    def shuangww():
        print('shuangwaiwai')
    
    shuangww()
    hahaha()
    带参数装饰器开关

    多个装饰器装饰一个函数

    def qqxing(func):  #func = pipixia_inner
        def qqxing_inner(*args,**kwargs):
            print('in qqxing:before')
            ret = func(*args,**kwargs)  #pipixia_inner
            print('in qqxing:after')
            return ret
        return qqxing_inner
    
    def pipixia(func):  #dapangxie
        def pipixia_inner(*args,**kwargs):
            print('in pipixia:before')
            ret = func(*args,**kwargs)      #dapangxie
            print('in pipixia:after')
            return ret
        return pipixia_inner
    
    #qqxing(pipixia_inner)  -->dapangxie = qqxing_inner()
    @qqxing    #dapangxie = qqxing(dapangxie)  -->dapangxie = qqxing(pipixia(dapangxie)) -->
    @pipixia   #dapangxie = pipixia(dapangxie)
    def dapangxie():
        print("饿了么")
    dapangxie()
    多个装饰器装饰一个函数

    多个装饰器应用场景:

       1.计算func的执行时间 @timmer
    2.登录认证 #@auth

    补充:
    解耦  尽量的让代码分离。小功能之间的分离
    解耦的目的 提高代码的重用性

              

  • 相关阅读:
    教程:在 Visual Studio 中开始使用 Flask Web 框架
    教程:Visual Studio 中的 Django Web 框架入门
    vs2017下发现解决python运行出现‘No module named "XXX""的解决办法
    《sqlite权威指南》读书笔记 (一)
    SQL Server手工插入标识列
    hdu 3729 I'm Telling the Truth 二分图匹配
    HDU 3065 AC自动机 裸题
    hdu 3720 Arranging Your Team 枚举
    virtualbox 虚拟3台虚拟机搭建hadoop集群
    sqlserver 数据行统计,秒查语句
  • 原文地址:https://www.cnblogs.com/mengqingjian/p/7245370.html
Copyright © 2020-2023  润新知