发布时间: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
47750
46252
37132
34640
29231
25893
24762
19866
19426
17916
5720°
6323°
5843°
5892°
6992°
5830°
5850°
6365°
6319°
7683°