013 Python學習之匿名函式和閉包
阿新 • • 發佈:2020-08-04
匿名函式
匿名函式又叫一句話函式,比較簡單
語法:
lambda 引數: 返回值
例1:
ret = lambda a, b: a + b # a, b是引數, a + b 是要返回的值
print(ret(1, 2))
3
例2:
ret = lambda a, b: a if a > b else b
print(ret(3, 5))
5
閉包
閉包的概念:
-
閉包只會出現在巢狀函式中
-
內層函式對外層函式非全域性變數的引用(使用),就會形成閉包。被引用的非全域性變數稱為自由變數,這個自由變數會與內層函式產生一個繫結關係,當外層函式呼叫結束後,自由變數不會消失。
閉包的作用:
保證資料安全
例1:
# 巢狀函式 def make_average(): li = [] # 區域性變數li def average(new_value): li.append(new_value) # 記憶體函式呼叫外層函式非全域性變數li print("列表li的內容是:", li) return sum(li)/len(li) return average ret = make_average() print(ret(10000)) print(ret(11000)) print(ret(12000)) print(ret(9000)) print(ret.__code__.co_freevars) # 判斷一個函式是不是閉包,檢視自由變數即可
執行結果是:
列表li的內容是: [10000]
10000.0
列表li的內容是: [10000, 11000]
10500.0
列表li的內容是: [10000, 11000, 12000]
11000.0
列表li的內容是: [10000, 11000, 12000, 9000]
10500.0
自由變數
('li',)