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)
View Code

 

从例子中可以看到fun函数被作为参数传入到test2函数中,这个就是最简单的高级函数。

第二什么是嵌套函数

在一个函数体内创建另外一个函数,这种函数就叫嵌套函数

嵌套函数怎么用

def foo():
    def bar():
        print("in the bar")
    bar()
foo()
View Code

第三装饰器是什么

 在不改变原函数以及原函数的调用的情况下扩展原函数的功能

学了上面两种不同的函数之后,我们来学习装饰器就简单多,因为装饰器就是这两种函数相加而成的。

我们先来看个简单的例子。

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()
View Code

 这网上经常见到一个例子,我觉得还行,是个简单有基本的装饰器例子。

你在看看下面这个例子,也是一个装饰器的例子,每行代码都有解析到

#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)()
View Code

 这样就实现了,最简单的装饰器。但是有没有发现,传入的函数是不带参数的,要是带参数,那装饰器怎么来写的。

 

posted on 2020-02-27 15:21  学习永远没有尽头  阅读(311)  评论(0)    收藏  举报