python3装饰器的简单解释

发布时间:2019-09-27 07:07:17编辑:auto阅读(1706)

    闭包,也叫词法闭包:如下所示函数A主要是为了函数B提供运行环境的
    闭包只是在表现和形式上像函数,其实闭包并不是函数
    由函数在嵌套环境中,内层函数里,对外层函数作用域的变量进行了引用,那么在外层函数返回后,内层函数依然可是使用外层函数的变量,这样的变量就构成了可以使用时的环境
    所以闭包对于隐藏状态,以及在函数和作用域中进行切换,一个函数可以发挥很多种功能
    #闭包:如下所示我们只需要不断的变化f调用变化就可以是函数B跟着变化了
    def A(num1,num2):
        def B(x,y):
            print("我是%s!"%(num1+x))
            print("我是%s!"%(num2+y))
        return B
    f=A(1,2)
    f(3,4)


    装饰器:

    一下面的例子为例,如果我们有一个简单的函数C,我们在不动其他函数的基础上需要给函数C增加新的功能,需要怎么做呢?这就需要用到装饰器了


    #这是不用装饰器时:
    def A(func):
        def B():
            print("我是附加功能1!") #附加功能
            func()
            print("我是附加功能2!")  # 附加功能
        return B
    
    def C():
        print("我是函数原来的功能!")
    res=A(C)
    res()
    #用装饰器时:
    def A(func):
        def B():
            print("我是附加功能1!") #附加功能
            func()
            print("我是附加功能2!") #附加功能
        return B
    @A
    def C():
        print("我是函数原来的功能!")
    C()
    #带参数的装饰器:
    def A(func):
        def B(x):
            print("我是附加功能1!") #附加功能
            func(x)
            print("我是附加功能2!") #附加功能
        return B
    @A
    def C(x):
        print("我是函数原来的功能!%s"%x)
    C('hello action!')
    
    这里的@A也就等于了
    res = A(C)
    
    def A(canshu):
        def B(fun):
            def C(x):
                fun(x)
                print(canshu)
            return C
        return B
    @A('hello')
    
    def D(x):
        print(x)
    D('你好!')
    
    被装饰的函数的参数都需要传到返回函数的那一层去,必须我在C那一层调用被装饰的函数,就需要把参数传到C那一层!


关键字

上一篇: Python3 函数

下一篇: centos 7 安装python3