闭包:
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。
python语言中形成闭包的三个条件:
1)必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
2)内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
3)外部函数必须返回内嵌函数——必须返回那个内部函数
def Funx(x):
print("funy之前")
def funy(y)
print("funy之内")
return x*y
print("funy之后")
return Funy
m=Funx(3)
print(m(5))
装饰器:
装饰器的原则及构成:
原则:
1、不能修改被装饰函数的源代码。
2、不能修改被装饰函数的调用方式。
3、不能改变被装饰函数的执行结果。
装饰器对被装饰函数是透明的。
如何理解装饰器
1、函数即“变量”
2、高阶函数
a:把一个函数名作为实参传递给另外一个函数
b:返回值中包含函数名
3、嵌套函数
在一个函数体内声明另一个函数称为函数的嵌套
#装饰器例子:
import time
# def timmer(func):
# def warpper(*args,**kwargs):
# start_time=time.time()
# func()
# stop_time=time.time()
# print('the func run time is %s'%(stop_time-start_time))
# return warpper
# @timmer
# def func1():
# time.sleep(5)
# print("I'm a test!")
# func1()
语法糖:
def doupi(fn):
def jiadoupi():
print("麻将豆皮10块")
return fn()+10
return jiadoupi
def xiangcai(fnn):
def jiaxiangcai():
print("麻将香菜5块")
return fnn()+5
return jiaxiangcai
@xiangcai
@doupi
def diguo():
print("底锅50")
return 50
aa=doupi(xiangcai(diguo))
print(aa())