閉包與裝飾器

2021-09-26 08:25:12 字數 1221 閱讀 3589

閉包

a = 1

def inner():

return a

return inner

print(ret())

保證資料安全性

裝飾器—————————————————假裝分隔符—————————————

裝飾器

def warpper(f): #這裡接受func記憶體位址,f是要被裝飾的函式的函式名,f就是相當於閉包裡面的自由變數

def inner(*args,**kwargs):

print("被裝飾函式執行前")

ret=f(*args,**kwargs) #列印((1, 2, 3, 4), ),這裡f也就是呼叫func函式體

print("被裝飾函式執行後")

return ret #返回func的return值,如果沒有return就返回none,這一句必須加在最裡面函式最後一行,加在前面則return後面語句完全不會執行

return inner

#@warpper 要將語法糖放在被裝飾的函式正上方

def func(*args,**kwargs):

print(f"被裝飾的")

return "我是func函式" #這裡沒有return返回none

func=warpper(func) #把func傳給f,並接受返回的inner記憶體位址

print(func(1,2,3,4,a=1)) #執行inner裡面的函式體

def timeslong(func):  # 裝飾器

def call():

start = time.clock()

print("it's time starting ! ")

func()

print("it's time ending ! ")

end = time.clock()

return "it's used : %s ." % (end - start)

return call

@timeslong

def f(): # 這是被裝飾函式

y = 0

for i in range(10):

y = y + i + 1

print(y)

return y

print(f())

裝飾器與閉包

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

閉包與裝飾器

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

閉包 與 裝飾器

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