• 装饰器及进阶


    简单的装饰器举例

    def wrapper(f): # 装饰器函数
        def inner(*args,**kwargs):
            print('在函数执行前')
            ret = f(*args,**kwargs) # 被装饰的函数
            print('在函数执行后')
            return ret
        return inner
    
    @wrapper # @ 语法糖 ,@装饰器函数名
    def func(a,b):# 被装饰的函数
        print(f'{a}+{b}={a+b}')
    
    # 被装饰器装饰后,函数名 func = wrapper(func) = inner
    result = func(1,2)# result = func(1,2) = inner(1,2)
    

    装饰器的作用

    不想修改函数的调用方式 但是还想在原来的函数前后添加功能。timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用

    原则

    开放封闭原则:

    ​ 对扩展是开放的,对修改是封闭的。

    本质

    装饰器的本质 : 闭包函数

    函数名的两个内建函数

    def wahaha():
        '''
        一个打印娃哈哈的函数
        :return:
        '''
        print('娃哈哈')
    
    print(wahaha.__name__) #查看字符串格式的函数名 # wahaha
    print(wahaha.__doc__)  
    #document 
        #一个打印娃哈哈的函数
    	#    :return:
        
    

    多个装饰器装饰同一个函数

    #多个装饰器装饰一个函数
    def wrapper1(func):
        def inner1():
            print('wrapper1 ,before func')
            ret = func()
            print('wrapper1 ,after func')
            return ret
        return inner1
    
    def wrapper2(func):
        def inner2():
            print('wrapper2 ,before func')
            ret = func()
            print('wrapper2 ,after func')
            return ret
        return inner2
    
    def wrapper3(func):
        def inner3():
            print('wrapper3 ,before func')
            ret = func()
            print('wrapper3 ,after func')
            return ret
        return inner3
    
    @wrapper3
    @wrapper2
    @wrapper1
    def f():
        print('in f')
        return '哈哈哈'
    
    print(f())
    

    使用场景

    记录用户的登录情况、、、计算这个函数的执行时间

  • 相关阅读:
    C++ 虚函数
    一个 CTF Crypto 题解
    关于 CTF 图片相关题目的一些套路
    无迹卡尔曼滤波(Unscented Kalman Filter)
    python机器学习之决策树
    Python:针对出现的ModuleNotFoundError: No module named '×××'
    模糊综合评价
    层次分析法
    matlab练习3
    matlab常用命令
  • 原文地址:https://www.cnblogs.com/chenych/p/10940301.html
Copyright © 2020-2023  润新知