python 中的 operator 模組可以讓它支援函式式程式設計。
假設我們需要乙個計算階乘的函式,一般做法是使用遞迴。如果使用函式式程式設計,可以有兩種方式,一種 lambda,另一種使用 operator 模組中的算術函式。我們做個比較。
首先使用 lambda 方式來實現:
from functools import reduce
def fact(n):
return reduce(lambda a, b: a * b, range(1, n + 1))
這裡用到了 reduce 方法,reduce() 函式語法:reduce(function, iterable[, initializer])
。其中的 function 函式有兩個引數。reduce() 函式會先對集合中的第 1、2 個元素進行 function 函式處理,得到的結果再與第三個元素進行 function 函式處理,最後得到乙個結果1。
reduce() 函式中的 function 使用 lambda 表示式。第二個入參 iterable 使用 range() 方法來生成。
接著使用 operator 模組中的 mul 函式來實現階乘:
from operator import mul
def factwithmul(n):
return reduce(mul, range(1, n + 1))
相對來說,使用 operator 模組中的計算函式,**更加簡潔。
從原始碼上分析,mul 函式就是計算兩個入參的乘積:
def mul(a, b):
"same as a * b."
return a * b
operator 模組內部還定義了很多類似的計算函式,比如:
operator 模組中還有一類函式能夠起到條件過濾的作用。
首先介紹 itemgetter 函式。假設定義了乙個 f 函式,f = itemgetter(2),那麼如果呼叫 f®,實際會返回 r[2]。也就是說,傳入的入參 r,最終返回的只是 r 的索引值為 2 (從 1 開始計算)那一部分。
itemgetter 函式應用場景是:根據元組的某個欄位對元組列表進行排序。比如我們有一段 json 格式的城市資料,需要對其簡稱進行排序:
from operator import itemgetter
metro_areas = [('tokyo', 'jp', 36.933, (35.689722, 139.691667)), ('delhi ncr', 'in', 21.935, (28.613889, 77.208889)),
('mexico city', 'mx', 20.142, (19.433333, -99.133333)),
('new york-newark', 'us', 20.104, (40.808611, -74.020386)),
('sao paulo', 'br', 19.649, (-23.547778, -46.635833)),
]for city in sorted(metro_areas, key=itemgetter(1)):
logging.info('city -> %s', city)
執行結果:
info - city -> ('sao paulo', 'br', 19.649, (-23.547778, -46.635833))
info - city -> ('delhi ncr', 'in', 21.935, (28.613889, 77.208889))
info - city -> ('tokyo', 'jp', 36.933, (35.689722, 139.691667))
info - city -> ('mexico city', 'mx', 20.142, (19.433333, -99.133333))
info - city -> ('new york-newark', 'us', 20.104, (40.808611, -74.020386))
城市資料陣列中的每乙個元素,拆分來看,就是元組形式。 itemgetter 函式取出元組的第二個值作為 sorted 函式的排序依據。
如果傳入 itemgetter 的入參不止乙個,那麼它就是乙個過濾函式,只把需要的列過濾出來。
比如我們只需要城市陣列中的城市簡稱與所在座標,就可以這麼做:
cc_name = itemgetter(1, 3)
for city in metro_areas:
logging.info('city -> %s', cc_name(city))
執行結果:
info - city -> ('jp', (35.689722, 139.691667))
info - city -> ('in', (28.613889, 77.208889))
info - city -> ('mx', (19.433333, -99.133333))
info - city -> ('us', (40.808611, -74.020386))
info - city -> ('br', (-23.547778, -46.635833))
說說 python 中的高階函式.
luciano ramalho (作者),安道,吳珂 (譯者).流暢的python[m].人民郵電出版社,2017:265-269.
也說說Python中 init
以乙個貓狗識別的程式為例,說說 init py的作用。在windows的cmd命令列中,使用下面指令把所在路徑下面的所有檔案以樹的形式列出。tree f d tree.txt我手頭上的乙個使用knn進行貓狗分類的專案,包含有以下的檔案。knn.py pet sample cat1 dog1 pyim...
實現opera中書籤匯入IE中
先開啟opera書籤,然後 檔案 匯入匯出 匯出為 html 檔案,然後將這個檔案用記事本開啟,另存為,選 ansi 編碼,覆蓋原檔案儲存,然後開啟 ie 匯入 用記事本開啟之後然後另存為的對話方塊最下面會有乙個選項是選擇編碼的,選擇ansi編碼即可。匯入ie中我沒有實踐過。唉,好奇心驅使我又去實踐...
說說Python中的help 和dir 函式?
問 說說python中的help 和dir 函式?答 在python中help 和dir 這兩個函式都可以從python直譯器直接訪問,並用於檢視內建函式的合併轉儲。dir 函式 dir 函式可以列出指定類或模組包含的全部內容 包括函式 方法 類 變數等 下面分別說說兩者的用法 1 如果希望檢視某個...