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

python学习第十二天:闭包函数与装饰器

时间:2018-06-11 19:35:38      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:语法糖   sleep   IV   闭包   自己   全局   作用   语法   运行   

闭包函数:

什么是闭包函数:

         闭指的是定义在一个函数内部

         包指的是该函数包含对外部作用域(非全局作用域)名字的引用

def counter():
  n=0
  def incr():
    nonlocal n
    x=n
    n+=1
    return x
  return incr

c=counter()
print(c())
闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域

 

装饰器

1.什么是装饰器

         就目前来看:装饰器就是定义一个函数,只不过该函数的功能是用来为其它函数添加额外的功能的

         其实:装饰器本身其实可以是任意可调用的对象,

                    被装饰的对象也可以是任意可调用的对象。

 

2.为什么要用装饰器

         软件维护应该遵循开发封闭原则:

         开放封闭原则指的是:

                  ①软件一旦上线运行后对修改源代码是封闭的

                  ②对扩展功能是开放的

         这就用到了装饰器

         装饰器的实现必须遵守两大原则:

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

         ②不可修改被装饰对象的调用方式

import time
def timmer(func):
    def wrapper(*args,**kwargs):
        start_time=time.time()
        res=func(*args,**kwargs)
        stop_time=time.time()
        print(‘run time is %s‘ %(stop_time-start_time))
        return res
    return wrapper

@timmer
def foo():
    time.sleep(3)
    print(‘from foo‘)
foo()

  

其实@代表语法糖

@timmer 表示foo = timmer(foo)

python学习第十二天:闭包函数与装饰器

标签:语法糖   sleep   IV   闭包   自己   全局   作用   语法   运行   

原文地址:https://www.cnblogs.com/luck-L/p/9168638.html

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