zoukankan      html  css  js  c++  java
  • python3 装饰器

    python3 装饰器

    一、闭包

    闭包的两个条件:函数内套有内层函数;内层函数引用外层函数定义的变量。

    eg:

    def outer():

        x=10

        def inner():

        print(x)

        return inner

    二、装饰器

    装饰器是为了在不改变原先函数源码的前提下,增加功能而存在的。执行流程:在调用被装饰器修饰的函数时,装饰器会先被调用,将被装饰函数的函数名传入装饰器函数,执行装饰器内层函数,内层函数会调用被装饰函数,从而实现被装饰函数的执行,而增加的功能在内层函数里写着,所以增加的功能也实现了。这样做的好处是,被装饰的函数的调用方法不变,从而防止牵一发而动全身的现象出现;没有改变被装饰函数的源码,符合开放封闭原则。

    注意,装饰器函数必须是闭包函数。

    eg:

    装饰器函数:

    import time
    def show_time(f):
        def inner(*args,**kwargs):      #设定不定长参数,防止被装饰函数有参数
            start_time=time.time()
            f(*args,**kwargs)
            time.sleep(3)
            end_time=time.time()
            print('spend_time=%s'%(end_time-start_time))
        return inner()

     

    @show_time
    def foo():           #被装饰器修饰的函数
        print('ok')

    foo()#调用函数

    如果需要向装饰器函数中传参则在装饰器函数外围在套一层外部函数。

    eg2:

    def outer(*args):

        def show_time(f):

              def inner(*args,**kwargs):

                   pass

             return inner

    return show_time

    @outer(‘参数’)

    def foo ():

        pass

    foo()#调用函数

  • 相关阅读:
    scrollview嵌套recyclerview显示不全现象
    scrollview嵌套recyclerview卡顿现象
    设计模式——原型模式
    设计模式——访问者模式
    设计模式——外观模式
    设计模式——责任链模式
    设计模式——组合模式
    设计模式——享元模式
    设计模式——迭代器模式
    设计模式——备忘录模式
  • 原文地址:https://www.cnblogs.com/xshan/p/8467515.html
Copyright © 2011-2022 走看看