码迷,mamicode.com
首页 > 编程语言 > 详细

Python--闭包与装饰器

时间:2017-10-11 22:40:31      阅读:161      评论:0      收藏:0      [点我收藏+]

标签: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   闭包   装饰器   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!