裝飾器與閉包

2021-08-03 12:53:25 字數 905 閱讀 8245

閉包

內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包。

裝飾器@是裝飾器的符號

裝飾器是對閉包的一種利用,內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包,把呼叫的引數,換成函式,就是裝飾器,因為python中,函式也是當做物件,從而有裝飾器這一種特殊的用法。

有引數的裝飾器就是在外面一層再加上一層閉包。

簡單裝飾器

import logging

def use_logging(func):

def warper(*args,**kwargs):

logging.warn("%s is running"%func.__name__)

return func(*args)

return warper

@use_logging

def foo():

print("i am foo!")

if __name__ == "__main__":

foo()

帶引數的裝飾器
import logging

def use_logging(level):

def decor(func):

def warper(*args,**kwargs):

if level == "warn":

logging.warn(" is running".format(func.__name__))

return func(*args)

return warper

return decor

@use_logging(level="info")

def foo():

print("i am foo!")

foo()

閉包與裝飾器

閉包 a 1 def inner return a return inner print ret 保證資料安全性 裝飾器 假裝分隔符 裝飾器def warpper f 這裡接受func記憶體位址,f是要被裝飾的函式的函式名,f就是相當於閉包裡面的自由變數 def inner args,kwargs ...

閉包與裝飾器

閉包函式 命名空間與作用域 函式巢狀 函式物件 核心點 名字的查詢關係是以函式定義階段為準 閉 函式指的該函式是內嵌函式 包 函式指的該函式包含對外層函式作用域名字的引用 不是對全域性作用域 方式一 直接把函式體需要的引數定義成形參 def f2 x print x f2 1 f2 2 f2 3 方...

閉包 與 裝飾器

函式引數 函式名儲存了函式所在的空間位址 函式名 到函式所在的空間執行裡面的 閉包 發生函式巢狀 外層函式有引數 內層函式使用到 節省系統資源 提高 復用率的一種特殊語法 語法格式 def 外層函式 引數 def 內層函式 pass return 內層函式 閉包流程 執行第五行 呼叫func out...