閉包
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...