首页 > 编程语言 > 详细

Python--闭包与装饰器

时间:2017-10-11 22:21:54      阅读:179      评论:0      收藏:0      [点我收藏+]

闭包的意义:

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

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

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--闭包与装饰器

原文:http://11368245.blog.51cto.com/11358245/1971497

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!