天天看點

python 疊代器與函數工具子產品

itertools子產品 生成疊代器

  • 簡介 用于疊生成疊代器函數
  • 使用索引
    • 無限疊代器
      • count(start=0, step=1)

      • cycle(p)

        對序列 p 生成無限循環
      • repeat(elem [,n])

        生成無限個 elem 元素重複的疊代器,如果指定了參數 n,則隻生成 n 個 elem 元素
    • 常用疊代器
      • accumulate(p[,func])

        預設生成根據序列 p 元素累加的疊代器
        • 預設産生的新序列的每一個元素,皆為前面累加結果之和
        • func 為定義計算疊代器下一個元素的值, 初始累積值為首元素
      • chain(p, q, ...)

        :将多個序列裡的元素“鍊”在一起生成新的序列
      • compress(data, selectors)

        根據 selectors 序列的值對 data 序列的元素進行過濾
      • dropwhile(pred, seq)

        :使用 pred 函數對 seq 序列進行過濾,丢棄掉符合pred傳回真值之前的元素,其之後全部傳回
      • takewhile(pred, seq)

        :該函數和上一個函數恰好相反,擷取符合pred之前的元素
      • filterfalse(pred, seq)

        使用 pred 函數對 seq 序列進行過濾,保留 seq 中使用 pred 計算為 True 的元素
      • islice(seq, [start,] stop [, step])

        :其功能類似于序列的 slice 方法
      • starmap(func, seq)

        :使用 func 對 seq 序列的每個元素進行計算,将計算結果作為新的序列元素
      • zip_longest(p,q,...)

        将 p、q 等序列中的元素按索引合并成元組,這些元組将作為新序列的元素

functools子產品

  • 簡介 一些函數和可調用對象的工具類
  • 分布
      • functools.partial(func, *args, **keywords)

        • 該類用于為 func 函數的部分參數指定參數值,進而得到一個轉換後的新函數,類似于科裡化
      • functools.partialmethod(func, *args, **keywords)

        • 于為類中的方法設定參數值
    • 函數
      • functools.cmp_to_key(...)

        将老式的比較函數轉為關鍵字函數
      • @lru_cache(maxsize=128, typed=False)

        緩存算法來緩存相對耗時的函數結果,避免傳入相同的參數重複計算
      • functools.reduce(function, iterable[, initializer])

        • 将初始值(預設為 0,可由 initializer 參數指定), 多值化一
      • @functools.singledispatch

        • 應用場景 類型斷言對函數 函數裝飾器
        • 函數裝飾器的作用是根據函數參數類型轉向調用另一個函數,進而實作函數重載的功能
        • 産生會在函數變量名上注冊方法,

          dispatch() ,register(), registry.keys()

      • @total_ordering(cls)

        類裝飾器,用于為類自動生成比較方法, 生成全部與排序有關的方法
        • 開發者隻要提供 lt()、le()、gt()、ge() 其中之一(最好能提供 eq() 方法),
        • @functools.total_ordering 裝飾器就會為該類生成剩下的比較方法
    • wrapper包裝
      • 主要就是讓包裝函數的 name、doc 屬性與被包裝函數保持一緻
      • functools.update_wrapper(wrapper, wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

        • 對wrapper 函數進行包裝,使之看上去就像 wrapped(被包裝)函數。 函數
      • @functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

        • 該函數裝飾器用于修飾包裝函數,使包裝函數看上去就像 wrapped 函數。 函數裝飾器

繼續閱讀