2012-12-10 11 views

答えて

10

あなたがグローバルとしてマークにそれを必要とする意味グローバル変数に代入されます:あなたはローカルスコープ内の変数に割り当てた場合、ローカルであると想定される

def somefunction(): 
    global url_request 
    url_request+=1 

あなたがglobalステートメントを使用してPythonに最初に指示しない限り、変数です。

+0

これは決して知らなかった。どうもありがとう。 – user1561108

+0

'+ ='が代入をしているとは思えませんでした。 –

4

Python 2.7の場合、グローバル、ローカルの変数が必要です。各関数は変数のローカルスコープを作成します。

をローカルの有効範囲から読み取ることができます。 グローバルオブジェクトメソッドを呼び出すこともできるので、変数をグローバルから変更することができます。しかし、値を再割り当てすることはできません。このコードでは

ルック:

requests = [1,2,3] 

def modify(): 
    requests.append(4) 

def redeclare(): 
    requests = [10,20,30] 

modify() 
print requests 
# will give you [1,2,3,4] 

redeclare() 
print requests 
# will give you [1,2,3,4] 

何が起こっていますか? requests変数をローカルスコープから再割り当てすることはできません。したがって、その他のredeclareコールコンテキストの可変ローカルスコープが作成されます。

コードに関して...まず、グローバルスコープから変数を再割り当てしようとします。どうして? url_requestintintは不変なので、操作url_request+=1の変更の値ではなく、新しい値を変数名に再割り当てする必要があります。第2に、globalこの変数の識別を指定しません。したがって、ローカル変数としてurl_requestと仮定するインタプリタのオプションは1つだけです。しかし...あなたはどこにでも値を宣言していませんでした....

UnboundLocalErrorは、前に宣言することなく変数値を使って操作を実行しようとしています。 Python変数/名前/スコープの詳細を理解するのに役立ちます。

関連する問題