天天看點

閉包 | Python從入門到精通:高階篇之十六

檢視上一節:sort函數

閉包

将函數作為傳回值傳回,也是一種高階函數。這種高階函數我們也稱為叫做閉包,通過閉包可以建立一些隻有目前函數能通路的變量。可以将一些私有的資料藏到的閉包中。

示例如下:

def fn():

    a = 10

    # 函數内部再定義一個函數
    def inner():
        print('我是fn2' , a)

    # 将内部函數 inner作為傳回值傳回   
    return inner

r = fn()    
r()           

執行結果為:

閉包 | Python從入門到精通:高階篇之十六

在這裡r是一個函數,是調用fn()後傳回的函數。這個函數實在fn()内部定義的,并不是全局函數,是以這個函數總是能通路到fn()函數内的變量。

# 求多個數的平均值
nums = [50,30,20,10,77]

# sum()用來求一個清單中所有元素的和
print(sum(nums)/len(nums))           
閉包 | Python從入門到精通:高階篇之十六

可以看到這就将清單中元素的平均值求出來了。

形成閉包的要件

① 函數嵌套

② 将内部函數作為傳回值傳回

③ 内部函數必須要使用到外部函數的變量

代碼如下:

def make_averager():
    # 建立一個清單,用來儲存數值
    nums = []

    # 建立一個函數,用來計算平均值
    def averager(n) :
        # 将n添加到清單中
        nums.append(n)
        # 求平均值
        return sum(nums)/len(nums)

    return averager

averager = make_averager()

print(averager(10))
print(averager(20))
print(averager(30))
print(averager(40))           
閉包 | Python從入門到精通:高階篇之十六

點選檢視配套視訊教程

擷取更多内容請訂閱

python學習站

官方技術圈!