# 装饰器
掌握之前的要点
1.作用域
2.高阶函数
3.闭包
闭包
定义:
如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包
def outer():
x = 10
def inner(): #条件1:内部函数
print(x) #条件2:外部环境变量
return inner #结论0:innner就是闭包
# outer()() #1种方式
f = outer() #2种方式
f() #问题:怎么找到的x,闭包
# inner() #报错,本地变量,全局无法使用
闭包=函数块+定义函数时的环境
封闭与开放
封闭的意思是有很多基础的模块是共同用的,比如登录,修改基础模块再调用的时候可能就会出错,所以不能再基础上修改,但是可以扩展,这就是他的开放
import time
def show_time(f):
def inner():
start = time.time()
f()
end = time.time()
print('spend %s' % (end - start))
return inner
@show_time #=foo=show_time(foo)
def foo():
print('foo....')
time.sleep(2)
# foo()
@show_time
def bar():
print('bar....')
time.sleep(3)
bar()
---------------------------
bar....
spend 3.000140905380249
把复杂的重复的想办法修改成简单的函数,用参数