每天至少打卡一道python面試題虱而。以盡量多的方式解鎖題目,如果有遺漏的方法葱椭,歡迎在評論區(qū)補充捂寿。希望大家一起提高!
能夠實現(xiàn)閉包的語言孵运,理論上都可以用裝飾器秦陋。
裝飾器的目的是在編程時,相同的代碼不要重復寫治笨,最好只寫異常驳概,然后在其他地方可以直接引用。這樣就提高了代碼重用率大磺,縮減代碼量抡句,同時也有助于提高代碼的可讀性和可維護下探膊,當需要更改的時候杠愧,只需要更改一個地方就可以了。
那么什么叫閉包呢
閉包:如果在一個外函數(shù)中定義了一個內函數(shù)逞壁,內函數(shù)中引用了外函數(shù)的臨時變量流济,并且外函數(shù)的返回值是對內函數(shù)的引用。這樣就構成了閉包
下面這段示例代碼有助于我們理解上面這句話:
# 這里outer是外函數(shù)腌闯,inner是內函數(shù)
def outer(outer_in: int):
# temp_outer是外函數(shù)的臨時變量
temp_outer = 10
# 定義內函數(shù)inner
def inner():
# 內韓式引用了外函數(shù)的臨時變量outer_in绳瘟,temp_outer
print('inner func print: %s' % (outer_in + temp_outer))
# 外函數(shù)的返回值是對內函數(shù)的引用,注意沒有()姿骏,表示只是引用糖声,沒有實例化
return inner
if __name__ == '__main__':
demo = outer(20)
demo()
# 運行邏輯:
# 1.調用外部函數(shù),傳入參數(shù)20
# 2.此時外部函數(shù)有兩個臨時變量:outer_in=20分瘦,temp_outer=10蘸泻,并且創(chuàng)建了內部函數(shù)inner,把inner的引用返回給了demo
# 外部函數(shù)在結束的時候嘲玫,發(fā)現(xiàn)返回的內部函數(shù)inner會用到自己的臨時變量悦施,所以這兩個臨時變量就不會釋放,會綁定給內部函數(shù)
# 3.調用demo()去团,因為demo是存的對inner的引用抡诞,所以這里就相當于執(zhí)行inner()穷蛹,所以會打印:inner func print: 30