python拥有三大器,装饰器,迭代器和生成器
装饰器其实就是高级函数和嵌套函数的总和,不仅能够减少代码的数量,而且在以后的生产环境,也是必备的一种基本代码技术。
首先现在我会一步一步,从高级函数,嵌套函数,再到装饰器,这样的过程来慢慢向大家详解装饰器。
第一什么是高级函数
变量可以指向函数; 函数的参数可以接收变量; 一个函数可以接收另一个函数作为参数
简单点来说,满足高级函数的条件有两种:
(1)某一函数当做参数传入另一个函数中
(2)函数的返回值包含n个函数,n>0
高级函数怎么用
好,是不是看起来还是有点迷糊。。。。,那我们来看一个例子
1 def test1(): 2 print("this is test1") 3 def test2(fun): 4 fun() 5 print("this is test2") 6 test2(test1)
从例子中可以看到fun函数被作为参数传入到test2函数中,这个就是最简单的高级函数。
第二什么是嵌套函数
在一个函数体内创建另外一个函数,这种函数就叫嵌套函数
嵌套函数怎么用
def foo(): def bar(): print("in the bar") bar() foo()
第三装饰器是什么
在不改变原函数以及原函数的调用的情况下扩展原函数的功能
学了上面两种不同的函数之后,我们来学习装饰器就简单多,因为装饰器就是这两种函数相加而成的。
我们先来看个简单的例子。
import time def deco(f):#将函数作为参数传入,这是高级函数的写法 def wrapper():#里面又多个函数,这是嵌套函数的写法 start_time = time.time() f() end_time = time.time() execution_time = (end_time - start_time)*1000 print("time is %d ms" %execution_time ) return wrapper @deco def f():#新增加的功能 print("hello") time.sleep(1) print("world") if __name__ == '__main__': f()
这网上经常见到一个例子,我觉得还行,是个简单有基本的装饰器例子。
你在看看下面这个例子,也是一个装饰器的例子,每行代码都有解析到
#huangjiaping def now(fun): def bor(): print("this is bor") fun() print("fun is ok") return bor#这里返回的是bor函数地址,需要使用bor(),才能显示结果 @now#这是装饰器的语法糖,其实就是等于 fun=now(fun) def fun(): print("this is fun") fun() # fun() = now(fun)()
这样就实现了,最简单的装饰器。但是有没有发现,传入的函数是不带参数的,要是带参数,那装饰器怎么来写的。
浙公网安备 33010602011771号