6

1 つの関数でのみ使用される定数を宣言する場合、その変数はその関数でのみ使用されるためローカルで宣言する必要がありますか、それとも決して変更されないためグローバルで宣言する必要がありますか?

IEの方が優れています:

CONSTANT = (1, 3, 5, 8)

##SOME OTHER CODE HERE

def function1(arg):
    if arg in CONSTANT:
        do something

また:

def function1(arg):
    CONSTANT = (1, 3, 5, 8)
    if arg in CONSTANT:
        do something

この 2 つに大きな違いはないことはわかっていますが、始めたばかりで良い習慣を身につけたいので、2 つのプラクティスのどちらが好ましいかを知りたかっただけです。

4

3 に答える 3

4

私はそれをローカルに保ちます。必要に応じて、将来いつでもグローバルに移動したり、クラス内のメソッドを作成して定数をクラス変数に変換することで関数間で共有したりできます。これらの状況では、一般的に言えば、2 番目の例のように、実装情報を関数内に非表示にすることが、ローカルであるほど適切であり、最善の方法です。ここでは大きな違いはありませんが、プロジェクトが大きくなるにつれて、保守性とモジュール性が維持されます。

于 2013-04-06T13:01:37.377 に答える
1

以下の理由により、それらをグローバルに配置します。

  1. あなたの変数定数です
  2. Python では、グローバル スコープはモジュールの名前空間にカプセル化されます。つまり、変数は実際にはモジュール内でのみグローバルになります。
  3. 関数を何度も呼び出して定数をローカルに配置すると、関数を呼び出すたびに定数が再割り当てされます。
  4. 次に、異なる関数間で定数を共有できます。

ただし、オブジェクト指向プログラミングに移行する場合は、定数をクラス変数として配置します。

于 2013-04-06T13:11:45.097 に答える
0

何がベストかは状況によると思います。

実行時間が問題にならない場合は、定数を毎回新しい変数にロードしてもあまり時間がかかりません。これには、コード内のどこで定数が使用されているかを明示的に示すという明らかな利点があります。

それ以外の場合、グローバルは問題ありませんが、最適化の目的でのみこれを行います。考えてみれば、私があなたと同じ質問をした唯一の理由は最適化です。

グローバルを使用する他の正当な理由があるかもしれません:

  • プログラムのユーザーがコード内の値を頻繁に変更する必要があり、プログラムの引数を解析したくない場合、
  • 他のプログラムがアクセスする必要がある場合、

結論として、私は次のように言います: あなたが最善だと思うことをしてください。

于 2013-04-06T13:34:16.523 に答える