天天看點

閉包|學習筆記

開發者學堂課程【Python 語言基礎 3:函數、面向對象、異常處理:閉包】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/601/detail/8737

閉包​

目錄

一、 閉包的定義

二、 形成閉包的條件

一、閉包的定義

#将函數作為傳回值傳回,是一種高階函數

#這種高階函數被稱為閉包,通過閉包可以建立一些隻有目前函數能通路的變量

#可以将一些私有的資料藏到閉包中

d

​​

ef fn():

a = 10

#函數内部再定義一個函數

def inner():

print(‘

我是f

n2’, a )

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

return inner

#r 是一個函數,是調用fn()後傳回的函數

#這個函數是在 fn() 内部定義,不是全局函數

# 這個函數能通路到 fn() 函數内的變量

r

 = fn()

#

r()

#求多個數的平均值

n

ums = [50,30,20,10,77]

# sum() 用來求一個清單中所有元素的和

p

rint(sum(nums))

二丶形成閉包的條件

#形成閉包的要點:

#1.函數嵌套

#2.将内部函數作為傳回值傳回

#3.内部函數必須要使用外部函數的變量

求清單中所有元素的平均值

p

rint(sum(nums)/

len

())

#建立一個清單,用來儲存數值

nums

 = []

#建立一個函數,用來結算平均值

d

ef averager(n):

#将n添加到清單中

nums.append(n)

#求平均值

return sum(nums)/len(nums)

p

rint(averager(10))

p

rint(averager(10))

p

rint(averager(30))

p

rint(averager(30))

nums

 = []

d

ef make_averager():

d

ef averager(n):

nums.append(n)

return sum(nums)/len(nums)

r

eturn average

average = make_averager()

p

rint(average(10))

p

rint(average(20))

p

rint(average(30))

p

rint(average(40))