Python装饰器和回调函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器和回调函数相关的知识,希望对你有一定的参考价值。

1.装饰器

装饰器用来实现一种切面功能,即一些函数在调用前都必须实现的功能,比如用户是否登录,用户是否有权限这类需求,都很容易由装饰器来实现。

import functools

def log(func):
    @functools.wraps(func)
    def wrapper(*args, **kw):
        print(call %s(): % func.__name__)
        return func(*args, **kw)
    return wrapper

@log
def now():
    print(2015-3-25)

给函数now定义了一个装饰器log,实现功能:在调用函数之前,打印出函数的名字

最终的输出是:
>>> now()
call now():
2015-3-25

2.回调函数

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

个人理解的回调函数类似于这样一种情况,产品经理需要实现某种功能,需要找到开发,开发说我可以帮你写个函数实现这个功能,但是功能有点复杂,在不同的情况下需要传入不同的参数,这个参数是需要你来给我的。

一般应用于对应某一事件触发的函数。比方要实现爬虫,我可以帮你写个爬虫函数,但是你首先得知道要爬虫网站的URL,大概就是这样一个意思。

回调函数丰富了函数的调用方法,给开发带来很多方便。

In [11]: def test(num):
    ...:     for i in range(num):
    ...:         print hello,world

In [13]: def call(times,funcname):
    ...:     return funcname(times)

In [14]: call(3,test)
hello,world
hello,world
hello,world

 

以上是关于Python装饰器和回调函数的主要内容,如果未能解决你的问题,请参考以下文章

Python学习—— 装饰器和函数闭包

python 装饰器和property

python基础-装饰器和偏函数

python第二阶段第四天 装饰器和匿名函数

Python 3.5 装饰器和函数字段

Python迭代器和生成器,装饰器