6

私はPythonでのコーディングの初心者ですが、Javaから来た私にとっては少しジャンプです。私が今持っている質問は、定数などのためのPythonでのグローバル変数の使用についてです。Javaでは、定数について2つのアイデアがあります。次のようなものがあります。

private static final HOME_URL_CONST = "localhost:8080";

または、実行時に値を割り当てる必要がある場合:

private static HOME_URL = "";
public void init(){ 
  HOME_URL = "localhost:8080"; 
}

重要なのは、後者の場合、静的変数を設定すると、設定されたままになるということです。ただし、Pythonではそうではありません。グローバル変数を作成して関数に割り当てると、その変数にはその関数内に割り当てられた値のみが含まれます。今私はこのようなものを持っています:

def initialize():
  global HOME_URL
  with open("urls.txt", 'rb') as f:
    HOME_URL = json.load(f.read())['urls']

これはこれを行うための許容可能な方法ですか、それとも私が気付いていないいくつかの影響や副作用がありますか?

4

1 に答える 1

9

Python では、動的な性質のため、const 変数自体の定義はありません。定数は Style によって指定されるため、PEP 8から引用されます。

通常、定数はモジュール レベルで定義され、すべて大文字で書かれ、アンダースコアで単語が区切られます。例には、MAX_OVERFLOW および TOTAL が含まれます。

したがって、変数を定数として使用する場合は、モジュール レベルで定義し、アンダースコアで区切られた大文字で名前を付け、規則に従って、定数変数と競合する他の変数が他のスコープにないようにします。いずれの場合も、モジュール レベルで定義された変数は関数レベルでスコープ内にあるため、グローバル修飾子は必要ありません。

したがって、この特定のケースでは

HOME_URL = "localhost:8080"
def initialize():
      #global HOME_URL #You don't need this
      home_url = HOME_URL
      with open("urls.txt", 'rb') as f:
           #Constants are not supposed to mutate
           home_url = json.load(f.read())['urls']
于 2013-01-21T18:40:03.077 に答える