前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3装饰器的简单解释

python3装饰器的简单解释

作者头像
py3study
发布2020-01-03 16:25:09
3470
发布2020-01-03 16:25:09
举报
文章被收录于专栏:python3python3
代码语言:javascript
复制
闭包,也叫词法闭包:如下所示函数A主要是为了函数B提供运行环境的
闭包只是在表现和形式上像函数,其实闭包并不是函数
由函数在嵌套环境中,内层函数里,对外层函数作用域的变量进行了引用,那么在外层函数返回后,内层函数依然可是使用外层函数的变量,这样的变量就构成了可以使用时的环境
所以闭包对于隐藏状态,以及在函数和作用域中进行切换,一个函数可以发挥很多种功能
代码语言:javascript
复制
#闭包:如下所示我们只需要不断的变化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增加新的功能,需要怎么做呢?这就需要用到装饰器了

代码语言:javascript
复制
#这是不用装饰器时:
def A(func):
    def B():
        print("我是附加功能1!") #附加功能
        func()
        print("我是附加功能2!")  # 附加功能
    return B

def C():
    print("我是函数原来的功能!")
res=A(C)
res()
代码语言:javascript
复制
#用装饰器时:
def A(func):
    def B():
        print("我是附加功能1!") #附加功能
        func()
        print("我是附加功能2!") #附加功能
    return B
@A
def C():
    print("我是函数原来的功能!")
C()
代码语言:javascript
复制
#带参数的装饰器:
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那一层!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档