Python--闭包与装饰器

Posted

tags:

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

闭包的意义:

返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域 

#应用领域:延迟计算(原来我们是传参,现在我们是包起来)

from urllib.request import urlopen      

def index(url):         

    def get():             

    return urlopen(url).read()         

   return get      

baidu=index(‘http://www.baidu.com‘)     

print(baidu().decode(‘utf-8‘))


装饰器: 

装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。 强调装饰器的原则:

1 不修改被装饰对象的源代码 

2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能

装饰器其根本就是闭包函数  



装饰器语法

被装饰函数的正上方,单独一行        

@deco1         

@deco2         

@deco3         

def foo():             

  pass          

foo=deco1(deco2(deco3(foo))) 


装饰器补充:wraps

from functools import wraps


def deco(func):

    @wraps(func) #加在最内层函数正上方

    def wrapper(*args,**kwargs):

        return func(*args,**kwargs)

    return wrapper


@deco

def index():

    ‘‘‘哈哈哈哈‘‘‘

    print(‘from index‘)


print(index.__doc__)


以上是关于Python--闭包与装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Python闭包与装饰器

Python高级--闭包与装饰器

python11 装饰器与闭包

python 闭包与装饰器

Python--闭包与装饰器

python基础闭包与装饰器