一部の関数は、パラメーター化されない「定数」値 (つまり、後で再定義されるように設計されていない) を必要とします。デフォルトの引数はfunction ごとに1 回だけ保存されますが、一部の引数はパラメーターとして (つまり、署名の一部として) 入れてもあまり意味がありません。(あまり役に立たない)例:
def foo(bar):
my_map = {"rab": barType, "oof": fooType}
return my_map.get(bar,defaultType)()
呼び出しごとにそのような定数を再定義するために、CPU 時間と RAM スペースが浪費されていました。他のいくつかの方法は、そのような定数をモジュールレベルのグローバルとして保存するか、関数を呼び出し可能なクラスにすることですが、他の方法があるかもしれません.
モジュール レベルのグローバルな方法を実行する場合、(意味する) 定数変数の前に "_" を付けて、それが誰の利益にもならないことを示します。それでも、モジュールの名前空間がわずかに「汚染されている」と感じています。
_my_map = {"rab": barType, "oof": fooType}
def foo(bar):
return _my_map.get(bar,defaultType)()
または、それをクラスの方法に変換します。インスタンスを作成__call__
する必要を避けるために、クラスメソッドを作成します。
class foo:
my_map = {"rab": barType, "oof": fooType}
@classmethod
def __call__(cls,bar):
return cls.my_map.get(bar,defaultType)()
これらのソリューションはPythonicで十分ですか?
これを行う他の方法はありますか?
そのような「定数」を使用する練習としても問題ありませんか?
私の例のこれらのオブジェクトは、必ずしも実際の定数ではありませんが、目的によってそのように使用されている (および考えられる)ことに注意してください。