hof
モジュールは、あると便利かもしれない高階関数をたかだか9個ほど集めたモジュールです。
Python版と無駄にCで実装した拡張モジュール版があります。
hofモジュールをインポートすると、拡張モジュールがあればそれを、なければPython版のモジュールをインポートします。
import hof # 拡張モジュールかPythonモジュールをインポート import hof_c # 拡張モジュールを直接インポート import hof_py # Pythonモジュールを直接インポート
拡張モジュールのほうが15-70%ほど高速ですが、コードは700%ほど膨れました。
いずれも最初の引数は関数、二つ目はシーケンス型です。
find(f, seq)
find_index(f, seq)
find_indices(f, seq)
all(f, seq)
any(f, seq)
take(f, seq)
take(lambda x: x < 3, [0,1,2,3,4,5]) #=> [0,1,2]
drop(f, seq)
take(f, seq)
の残りの要素からなるリストを返します。
drop(lambda x: x < 3, [0,1,2,3,4,5]) #=> [3,4,5]
span(f, seq)
take(f, seq)
と drop(f, seq)
からなるタプルを返します。
span(lambda x: x < 3, [0,1,2,3,4,5]) #=> ([0,1,2], [3,4,5])
partition(f, seq)
partition(lambda x: x % 2 == 0, [0,1,2,3,4,5]) #=> ([0,2,4], [1,3,5])