知识改变世界
生活可以更简单
注册 登录
***文章***

浅析Python的闭包和装饰器

作者:z 类型:转载 时间:2017-08-10

举个例子简单介绍下Python的闭包和装饰器,希望对大家的学习有帮助

  1. def ff(m):
        return m+1
    def fun(f, *args, **kwargs):
        n = kwargs.get('key', 0)
        print args, kwargs
        return f(*args)+n
    a = fun(ff, 1)
    print a
    b = fun(ff, 1, key=10)
    print b
    

运行结果:

  1. (1,) {}
    2
    (1,) {'key': 10}
    12
    

如果我们要实现以fun(ff, 1)的形式,实现b的值,该怎么办呢?有两种办法,闭包和装饰器。 闭包包含了一个函数及其环境变量,因此我们可以把其它参数(这里指的是key),整理成闭包;而装饰器则不改变函数的定义,只是在函数运行期间动态增加函数的功能,因此我们可以在函数运行的时候注入其他参数(这里指的是key)。闭包(Closure)

  1. def create_fun(num):
        def fun_bound(f, *args):
            return fun(f, *args, key=num)
        return fun_bound
    temp = create_fun(10)
    c = temp(ff, 1)
    print c
    

运行结果:

  1. (1,) {'key': 10}
    12
    

装饰器(Decorator)

  1. import functools
    def create_fun(num):
        def decorator(F):
            @functools.wraps(F)
            def fun_bound(f, *args):
                return F(f, *args, key=num)
            return fun_bound
        return decorator
    @create_fun(10)
    def fun(f, *args, **kwargs):
        n = kwargs.get('key', 0)
        print args, kwargs
        return f(*args)+n
    d = fun(ff, 1)
    print d
    

运行结果:

  1. (1,) {'key': 10}
    12
    

希望大家多多支持simple求知网。

希望本文所述对大家程序设计有所帮助。

***其他版块***

本站为编程爱好者提供计算机电子书免费资源下载,定期更新!

***其他***

更多内容,敬请期待!谢谢!!!