• Python Day12


    装饰器(闭包函数的一种应用场景)
     1 为何要用装饰器:
    开放封闭原则:对修改封闭,对扩展开放
     2 什么是装饰器
    装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。
    强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式
    装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能
    装饰器的定义:在不修改其他函数名和函数内部的代码的同时还可以给该函数添加功能
     3 装饰器的格式

             装饰器的格式:def 函数名1(参数):这里的参数就是代替需要装饰的函数名

    
    

              def 函数名2(*args,**kwargs):

    
    

                添加功能

    
    

                执行函数(*args,**kwargs)这里的函数执行,就是外层的参数执行

    
    

                添加功能

    
    

                return 执行函数后赋值的对象

    
    

              return 函数名2

    
    

      装饰器本身就是一个函数,属于闭包函数的一种。

         

     4. 先看简单示范
    import time
            def timmer(func):
                def wrapper(*args,**kwargs):
                    start_time=time.time()
                    res=func(*args,**kwargs)
                    stop_time=time.time()
                    print('run time is %s' %(stop_time-start_time))
                    return res
                return wrapper
    
            @timmer
            def foo():
                time.sleep(3)
                print('from foo')
            foo()
    
    输出结果
    from foo
    run time is 3.000171422958374
          5 装饰器语法:
    被装饰函数的正上方,单独一行
    @deco1
    @deco2
    @deco3
    def foo():
    pass

    foo=deco1(deco2(deco3(foo)))
    
    
     
    def wrapper(func):
    def inner(*args,**kwargs):
    print('你正在调用%s函数'%func.__name__)
    ret = func(*args,**kwargs)
    return ret
    return inner
    @wrapper
    def welcome(name):
    print('welcome:%s'%name)

    @wrapper
    def home():
    print('欢迎来到home页!')
    welcome('alex')
    home()


    输出结果

    你正在调用welcome函数
    welcome:alex
    你正在调用home函数
    欢迎来到home页!

     
     
  • 相关阅读:
    Windows下TEX排版论文攻略—CTeX、JabRef使用心得
    Bibtex使用方法
    制作BibTex文件
    【Java集合源码剖析】Hashtable源码剖析
    【Java集合源码剖析】HashMap源码剖析
    【Java集合源码剖析】Vector源码剖析
    【Java集合源码剖析】LinkedList源码剖析
    【Java集合源码剖析】ArrayList源码剖析
    【Java集合源码剖析】Java集合框架
    css布局笔记(一)
  • 原文地址:https://www.cnblogs.com/liuduo/p/7460138.html
Copyright © 2020-2023  润新知