一部の関数では、パラメータ化されない '定数'値(後で再定義するようには設計されていない)が必要です。デフォルトの引数はeach functionの場合stored only onceですが、いくつかはパラメータとして置くことはあまり意味がありません(つまり、signatureの一部である)。 (非常に有用ではない)は、例えば:Pythonでは、関数の '定数'を一度だけ格納する方法はありますか?
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)()
それともクラス道にそれを変換:それでも私はすべてshame of using何かas discouraged as globalsの話をしない、モジュールの名前空間はわずか「汚染」を感じます。私はインスタンスを作成する必要性を回避するために、__call__
classmethodます
class foo:
my_map = {"rab": barType, "oof": fooType}
@classmethod
def __call__(cls,bar):
return cls.my_map.get(bar,defaultType)()
は十分ニシキヘビこれらの解決策はありますか?
他の方法がありますか?
このような「定数」を使用することは習慣としても大丈夫ですか?
注は私の例では、これらのオブジェクトは、必ずしも実際の定数ではなく、その目的によりそのまま使用(と考えることができます)。機能上の属性として
これらの回答の1つで言及したように(私も同意します)、グローバル変数であることを具体的に説明するコメントを入れたいと思っています。 Pythonをよく理解しているより洗練されたソリューションにも私は興味があります。 – PascalVKooten
グローバル定数は問題ありません。問題を引き起こすのはグローバル*状態*です。 – user2357112