#請解釋下什么是閉包刃宵?
"""
在一些解釋性語言中,(比如python捅彻,JavaScript组去、php等),在函數(shù)中可以嵌套另外一個函數(shù)步淹,如果內部函數(shù)引用了外部函數(shù)的變量从隆,則構成了產生閉包的條件
閉包產生的三個條件:
1)必須有函數(shù)的嵌套
2)內部函數(shù)引用外部函數(shù)的變量
3)外部函數(shù)返回內部函數(shù)
"""
#在python這樣的解釋性語言中我們可以把函數(shù)看成一個特殊的變量,這個變量中保存的是函數(shù)的入口地址
def func1():
a = 100
def func2():
b = 200
nonlocal a #如果想把外面的a變量引過來并且可以賦值缭裆,需要用nonlocal來引入
a = 101
print(a)
func2()
print(a)
return func2 #返回的是func2的函數(shù)名键闺,即返回該函數(shù)的入口地址
f = func1()#func1返回的是func2的入口地址
#調用f
f() #101
#閉包的應用
# 什么是裝飾器?
#是一種設計模式澈驼,在不改變原來模塊的基礎上辛燥,可以用裝飾器給模塊額外的新增功能,這些新增功能在該裝飾器下生效缝其,離開了該裝飾器無效
#裝飾器好處:
'''
降低代碼耦合度挎塌,有利于代碼版本的迭代,功能的升級等
'''
#裝飾器的本質是一個閉包,用另外一個函數(shù)作為其參數(shù)
def outer(func):
def inner():
print("0")
func()
print("1")
return inner
#此時這個閉包的參數(shù)就是一個函數(shù)内边,就形成了一個裝飾器
#定義一個普通函數(shù)
def myfunc():
print("Hi")
myfunc()
#給myfunc加裝飾器
f = outer(myfunc) #此時的f 就是給myfunc加完裝飾器以后的函數(shù)
#在python2.4以后榴都,裝飾器可以如下寫:
@outer
def hello():
print("hello")
hello()
#相當于這種寫法
hello = outer(hello)
#回調
#主調函數(shù)
def funcA(a, b , c):
p = a * b
c(p) #在這里調用了回調函數(shù)fancB并且把funcA內部的變量傳給了funcB
#定義一個函數(shù),回調函數(shù)
def funcB(p):
print("你好漠其!嘴高,我是函數(shù)B", p)
funcA(10, 20, funcB)
day6拴事、閉包,裝飾器圣蝎,回調
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門抹竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人止潮,你說我怎么就攤上這事窃判。” “怎么了喇闸?”我有些...
- 文/不壞的土叔 我叫張陵袄琳,是天一觀的道長。 經(jīng)常有香客問我燃乍,道長唆樊,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任刻蟹,我火速辦了婚禮逗旁,結果婚禮上,老公的妹妹穿的比我還像新娘舆瘪。我一直安慰自己片效,他們只是感情好,可當我...
- 文/花漫 我一把揭開白布英古。 她就那樣靜靜地躺著淀衣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪召调。 梳的紋絲不亂的頭發(fā)上膨桥,一...
- 文/蒼蘭香墨 我猛地睜開眼澳厢,長吁一口氣:“原來是場噩夢啊……” “哼环础!你這毒婦竟也來了?” 一聲冷哼從身側響起剩拢,我...
- 正文 年R本政府宣布,位于F島的核電站呆万,受9級特大地震影響商源,放射性物質發(fā)生泄漏。R本人自食惡果不足惜谋减,卻給世界環(huán)境...
- 文/蒙蒙 一牡彻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧出爹,春花似錦庄吼、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盈蛮,卻和暖如春废菱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抖誉。 一陣腳步聲響...
推薦閱讀更多精彩內容
- 筆記更新于2019年11月19日,摘要:返回函數(shù)减牺;閉包的介紹豌习;裝飾器的工作原理解析 寫在前面:為了更好的學習pyt...
- 一類是集合數(shù)據(jù)類型,如 list 拔疚、 tuple 肥隆、 dict 、 set 稚失、 str 等栋艳;一類是 generat...
- ==和is == 是比較兩個對象是否相等。is 是比較兩個引用是否指向了同一個對象(引用比較)下愈。 深拷貝和淺拷貝 ...
- 本節(jié)知識點 閉包的基本概念 閉包基本使用 閉包表達式作為回調函數(shù) 閉包的多種寫法(尾隨閉包) 閉包表達式優(yōu)化 閉包...
- 屬性property 私有屬性添加getter和setter方法 對于類對象的私有屬性,我們不能直接調用毅舆,可以添加...