理解Python閉包,這應該是最好的例子

2022-07-12 20:48:20 字數 2029 閱讀 1223

此文**自:

作為一種程式語言特性,閉包得到了很多程式語言的支援,python也不例外。所謂閉包,在python中指的是攜帶乙個或多個自由量的函式。閉包函式的自由量不是函式的引數,而是生成這個函式時的環境變數。一旦閉包生成了,自由變數會繫結在函式上,即使離開創造它的環境,自由量依舊有效。總結一下,閉包的概念有以下三個要點。

有乙個很好的例子可以幫助初學者理解閉包。我們知道,幾乎所有的計算模組,比如python內建的標準數學模組math,提供的對數函式只能計算以2為底、以e為底和以10為底的三種對數。

>>

>

import math

>>

> math.log(math.e)

# 返回以e為底e的對數

1.0>>

> math.log2(4)

# 返回以2為底4的對數

2.0>>

> math.log10(

1000

)# 返回以10為底1000的對數

3.0

如果想要計算以a為底b的對數,則需要使用對數換底公式。

l og

ab=l

og10b

log10

alog_ab=\fracb}a}

loga​b

=log

10​a

log1

0​b​

>>

>

defglog

(b, a)

:# 返回以a為底b的對數

return math.log(b)

/math.log(a)

>>

> glog(25,

5)# # 返回以5為底25的對數

2.0

我們固然可以像上面的**那樣定義乙個函式glog(),計算以任意數為底的對數,但每次總要輸入兩個引數,和math模組的log()、log2()、log10()函式風格不一致。如果使用閉包,就能生成和math風格一致的對數函式。

>>

>

deflog_factory

(n):

# 定義乙個閉包生成函式

deflog_n

(x):

# 生成閉包

return math.log(x)

/math.log(n)

# 閉包中攜帶了環境引數n

return log_n # 返回閉包

>>

> log5 = log_factory(5)

# 用閉包生成器生成閉包

>>

> log7 = log_factory(7)

# 用閉包生成器生成閉包

>>

> log5(25)

# 該閉包攜帶的自由量是5

2.0>>

> log7(49)

# 該閉包攜帶的自由量是7

2.0

以上**,首先設計了乙個對數函式生成器log_factory(),輸入乙個整數n,就返回乙個以n為底的對數函式。繼而用這個生成器生成了兩個閉包函式,乙個名為log5,乙個名為log7。最後驗證一下,一切都和我們想象的完全一樣。

渠道一:京東自營圖書

渠道二:噹噹自營圖書

渠道三:作者簽名

回覆「python高手修煉之道」,即可收到如何購買簽名版的說明

**和優惠措施以各平台實際發布為準。

python閉包怎麼理解 Python 閉包的理解

很多函式型的語言都有閉包這一概念,比如python的兄弟js。人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。下面舉乙個例子 coding utf 8 def foo nums 0 5 for i in range 5 nums i lambd...

react中使用css的7中方式 應該是最全的

不需要元件從外部引入css檔案,直接在元件中書寫。import react,from react const div1 class test extends component render export default test 注意事項 1.在正常的css中,比如background color...

react中使用css的7中方式 應該是最全的

不需要元件從外部引入css檔案,直接在元件中書寫。import react,from react const div1 class test extends component render export default test 注意事項 1.在正常的css中,比如background color...