婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python 中Operator模塊的使用

Python 中Operator模塊的使用

熱門標簽:如何申請400電話代理 天津塘沽區地圖標注 智能電話機器人調研 地圖標注可以遠程操作嗎 滴滴地圖標注公司 江門智能電話機器人 甘肅高頻外呼系統 400電話在線如何申請 杭州房產地圖標注

Python 中的 Operator 模塊可以讓它支持函數式編程。

1 計算函數

假設我們需要一個計算階乘的函數,一般做法是使用遞歸。如果使用函數式編程,可以有兩種方式,一種 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 模塊內部還定義了很多類似的計算函數,比如:

2 過濾函數

operator 模塊中還有一類函數能夠起到條件過濾的作用。

首先介紹 itemgetter 函數。假設定義了一個 f 函數,f = itemgetter(2),那么如果調用 f(r),實際會返回 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 中Operator模塊的使用的詳細內容,更多關于Python 中Operator模塊的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Python利用operator模塊實現對象的多級排序詳解
  • Python中operator模塊的操作符使用示例總結
  • python函數enumerate,operator和Counter使用技巧實例小結

標簽:東莞 河池 漢中 德宏 廊坊 重慶 臨汾 長春

巨人網絡通訊聲明:本文標題《Python 中Operator模塊的使用》,本文關鍵詞  Python,中,Operator,模塊,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python 中Operator模塊的使用》相關的同類信息!
  • 本頁收集關于Python 中Operator模塊的使用的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 姚安县| 蒙城县| 林州市| 通许县| 牡丹江市| 四子王旗| 岐山县| 疏附县| 梧州市| 乡宁县| 盖州市| 洪雅县| 成武县| 息烽县| 武功县| 涿鹿县| 台北县| 宜宾县| 民丰县| 浦县| 洛阳市| 云霄县| 丰县| 南通市| 雷山县| 家居| 玛沁县| 聂拉木县| 迁安市| 册亨县| 永吉县| 肇东市| 兴山县| 桑植县| 罗甸县| 泰顺县| 甘南县| 安达市| 宁晋县| 黄冈市| 金坛市|