• 装饰器及进阶


    简单的装饰器举例

    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())
    

    使用场景

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

  • 相关阅读:
    AC自动机【学习笔记】
    SCOI2016 背单词【Trie树,贪心】
    【字符串算法】字典树Trie入门
    USACO 1.3 Name That Number【暴搜】
    MapReduce分组
    MapReduce排序
    博客园添加访问人数统计
    MapReduce的分区
    MapReduce的计数器
    MapReduce部分源码解读(一)
  • 原文地址:https://www.cnblogs.com/chenych/p/10940301.html
Copyright © 2020-2023  润新知