装饰器: 一, 例如: # vim yue7.py def foo(): print ("fool-------------------") foo() 运行: [root@localhost python]# python yue7.py fool------------------- 二,要求:要在上述函数不改变函数调用方式的情况下增加代码运行的时间。 # yue6.py import time def show_time(f): def inner(): #条件1:内部函数; start = time.time() f() #条件2:对外部环境的引用 foo() end = time.time() print ("Spend --%s s ---" %(end-start)) return inner def foo(): print ("fool-------------------") time.sleep(2) foo = show_time(foo) #<function show_time.<locals>.inner at 0x7f1686630488> (此时的foo只是一个内存地址) foo() 运行结果: [root@localhost python]# python yue6.py fool------------------- Spend --2.0029256343841553 s --- 三,对上面的代码进行改进,用装饰器修饰。 # vim yue5.py import time def show_time(f): def inner(): start = time.time() f() end = time.time() print ("Spend --%s s ---" %(end-start)) return inner @show_time #foo = show_time(foo)(装饰器) def foo(): print ("fool-------------------") time.sleep(2) foo() #调用 运行结果: [root@localhost python]# python yue5.py fool------------------- Spend --2.00250244140625 s ---
四,闭包:
#vim yue4.py def outer(): x = 10 def inner(): #条件1: inner是内部函数,相对于outer函数来说; print (x) #条件2:print(x)是对外部环境变量x=10的引用; return inner #outer()() f = outer() f() [root@localhost python]# python yue4.py 10 结论:内部函数inner就是一个闭包。