閉包
內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包。
裝飾器@是裝飾器的符號
裝飾器是對閉包的一種利用,內層函式呼叫外層函式的引數,並且返回內層函式,叫做閉包,把呼叫的引數,換成函式,就是裝飾器,因為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...