zoukankan      html  css  js  c++  java
  • 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页!

     
     
  • 相关阅读:
    虚拟机中对centOS7.4配置静态ip
    mybatis使用中出现的错误!
    http中get和post方法区别
    java中堆和栈的区别
    struts2工作流程
    springmvc工作流程
    JDBC访问数据库流程
    并行程序设计模式-Master-Worker模式-Guarded Suspension模式-不变模式-生产者-消费者模式的理解
    Future模式个人理解
    分布式系统一致性问题和Raft一致性算法
  • 原文地址:https://www.cnblogs.com/liuduo/p/7460138.html
Copyright © 2011-2022 走看看