闭包:
将组成函数的语句和这些语句的执行环节打包到一起所得到的对象。
当使用嵌套函数(函数中定义函数)时,闭包将捕获内部函数执行所需的整个环境。
此外,嵌套函数可以使用被嵌套函数中的任何变量,就行普通函数中可以引用全局变量一样。
e.g.
x=14
def f():
x=3
def b():
return x
return b
y=f()
print(y())
输出:
3
装饰器
对函数参数或返回值等进行加工处理,生成一个功能增强版的一个函数。
装饰器的参数是一个函数或者类,专门针对类或者函数进行加工处理。
使用@来实现,定义装饰器用于装饰函数时,使用@装饰器名称,放在函数或类定义行前
e.g.
import time
def deco(f):
def wrapper():
startTime = time.time()
f()
endTime = time.time()
msecs = (endTime - startTime)*1000
print("time is %d ms" %msecs)
return wrapper
@deco
def func():
print("hello")
输出:
hello
world
time is 1000 ms
time.sleep(1)
print("world")
if __name__ == '__main__':
f = func #这里f被赋值为func,执行f()就是执行func()
f()