1. 程式人生 > 實用技巧 >Linux基礎之檔案管理(高階)下等相關內容-97

Linux基礎之檔案管理(高階)下等相關內容-97

此文轉載自:https://blog.csdn.net/xufive/article/details/109269626

作為一種程式語言特性,閉包得到了很多程式語言的支援,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 o g a b = l o g 10 b l o g 10 a log_ab=\frac{log_{10}b}{log_{10}a}

logab=log10alog10b

>>> def glog(b, a): # 返回以a為底b的對數
		return math.log(b)/math.log(a)

>>> glog(25, 5) #  # 返回以5為底25的對數
2.0

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

>>> def log_factory(n): # 定義一個閉包生成函式
def log_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高手修煉之道》,書中類似的例子還有很多。該書今天已在京東和噹噹網正式上線預售,雙十一期間優惠力度空前(優惠活動時間:11月9日~11月11日)。如果覺得這本書還不錯,就不要錯過時機。想要簽名的同學,請關注公眾號“Python作業輔導員”,回覆“Python高手修煉之道”,即可收到如何購買簽名版的說明。


渠道一:京東自營圖書

  • 優惠活動時間:11月9日~11日


渠道二:噹噹自營圖書

  • 活動時間:11月9日~11日


渠道三:作者簽名

  • 關注公眾號“Python作業輔導員”
  • 回覆“Python高手修煉之道”,即可收到如何購買簽名版的說明

價格和優惠措施以各平臺實際釋出為準。