python 装饰器的小理解

初学python不久,面试遇到装饰器不会,回来查阅资料有感。


第一篇 博客,希望不要出错。

装饰器也是一种函数,能为已经存在的函数添加新的功能,像添加日志,性能测试等等。提到装饰器免不了提到闭包,提到闭包就会提到内嵌函数。所以按我的理解,解释这些(如有不对,请指出)。


内嵌函数:顾名思义是函数内部声明的函数,如:

 
 
def foo1():
    x = 2
    def foo2():
        print x+1
    foo2()
foo1()
输出是 3

上面函数:运行foo1()函数,foo1()内部调用foo2(),foo2()寻找x的值,内部作用域中,没有就去外部作用域找。

闭包能够读取其他函数内部变量的函数

def foo1(x):
    def foo2():
        print x+1
    return foo2()

foo1(4)
输出 5

看到这个与上面的区别了吗?

这个函数传入一个参数,直接返回一个函数。可以看到函数foo2()记住其外层作用域的事实,可以用来构造本质上有一个硬编码参数的自定义函数。然而在python中,任何都可以看成对象,函数也可以看成对象。

def foo1(fun):
    def foo2():
        fun()
    return foo2()

def fun():
    print 1

foo1(fun)
输出 1

把函数看成对象传入函数,可以实现。而且在foo1()中可以为fun()添加一些其他的功能,不影响他自己功能,这是不是和装饰器的定义类似了。

装饰器

def decorate(func):
    def foo(*args,**kwargs):
        print("it is runing")
        return func()
    return foo

@decorate
def num():
    for i in range(5):
        print i
num()
输出:

it is runing

0
1
2
3

4

一个简单的装饰器。简单理解就是创建一个新函数,并且把久函数当作参数调用,并在新函数添加一些新功能,但不会改变久函数的功能。

这是我的简单理解,有错请纠正我,谢谢。

猜你喜欢

转载自blog.csdn.net/zzzzzztt/article/details/79559096