1

スコープの可視性で奇妙な動作があり、マニュアルでこれを見つけることができませんでした。したがって、これが私のコードの一部をベースに簡略化したものです。

from server import WWW_DOCUMENT_ROOT

def write_config(project_abs_path):
    print WWW_DOCUMENT_ROOT

    # WWW_DOCUMENT_ROOT = 'A'

ここで、最後の行 (割り当て) がコメントアウトされている場合、正常にprint WWW_DOCUMENT_ROOT機能し、グローバルの値が出力されます。代入ステートメントのコメントが外された場合 -print WWW_DOCUMENT_ROOT動作を停止し、 と表示されます'WWW_DOCUMENT_ROOT' referenced before assignment

明らかに問題はglobal WWW_DOCUMENT_ROOTステートメントで修正されていますが、変数がコードの後半で割り当てられるかどうかによって動作が異なる理由は異なります。それは不安定で自明ではありません。または、ここで何かを得ていません。なぜこのようになっているのですか?

python 2.7.3

4

1 に答える 1

0

関数で参照する名前は、割り当てられるまでグローバルと見なされます

コンパイラは関数内の割り当てを確認し、代わりに名前をローカル変数としてマークします。ローカル名として、WWW_DOCUMENT_ROOT印刷しようとしても値がありません。

グローバル変数に影響を与えるためにへのglobal割り当てが必要な場合は、キーワードを使用します。WWW_DOCUMENT_ROOT

def write_config(project_abs_path):
    global WWW_DOCUMENT_ROOT 
    print WWW_DOCUMENT_ROOT

    WWW_DOCUMENT_ROOT = 'A'
于 2013-08-01T13:43:15.473 に答える