1. 程式人生 > 實用技巧 >013 Python學習之匿名函式和閉包

013 Python學習之匿名函式和閉包

匿名函式

匿名函式又叫一句話函式,比較簡單

語法:

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. 閉包只會出現在巢狀函式中

  2. 內層函式對外層函式非全域性變數的引用(使用),就會形成閉包。被引用的非全域性變數稱為自由變數,這個自由變數會與內層函式產生一個繫結關係,當外層函式呼叫結束後,自由變數不會消失。

閉包的作用:

保證資料安全

例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',)