itertoolsモジュールのドキュメントでこのコメントを見つけました
def dotproduct(vec1, vec2):
return sum(imap(operator.mul, vec1, vec2))
上記のレシピの多くは、グローバルルックアップをデフォルト値として定義されたローカル変数に置き換えることで最適化できることに注意してください。たとえば、内積レシピは次のように記述できます。
def dotproduct(vec1, vec2, sum=sum, imap=imap, mul=operator.mul):
return sum(imap(mul, vec1, vec2))
どうですか?。
実用的な顕著なスピードアップはありますか(より大きな関数シグネチャの不便さのバランスをとることができます)?
示されているようなケースでのローカル変数の使用は、どの特定の条件に関連しますか?
編集: timeitでテストしましたが、関連する違いがあります。
vec1、vec2としての2つの40アイテムリストの場合:
グローバルルックアップ->3.22720959404
ローカルルックアップ->3.19884065683
つまり、約 1%のゲイン。