python基礎之閉包函數與裝飾器

閉包函數:python

什麼是閉包函數:閉包

         閉指的是定義在一個函數內部app

         包指的是該函數包含對外部做用域(非全局做用域)名字的引用函數

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

c=counter()
print(c())
閉包的意義:返回的函數對象,不單單是一個函數對象,在該函數外還包裹了一層做用域,這使得,該函數不管在何處調用,優先使用本身外層包裹的做用域

 

裝飾器對象

1.什麼是裝飾器blog

         就目前來看:裝飾器就是定義一個函數,只不過該函數的功能是用來爲其它函數添加額外的功能的作用域

         其實:裝飾器自己其實能夠是任意可調用的對象,開發

                    被裝飾的對象也能夠是任意可調用的對象。class

 

2.爲何要用裝飾器import

         軟件維護應該遵循開發封閉原則:

         開放封閉原則指的是:

                  ①軟件一旦上線運行後對修改源代碼是封閉的

                  ②對擴展功能是開放的

         這就用到了裝飾器

         裝飾器的實現必須遵照兩大原則:

         ①不可修改被裝飾對象的源代碼

         ②不可修改被裝飾對象的調用方式

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)

相關文章
相關標籤/搜索