私はここでおかしくなりそうだと思います。
url_request = 0
def somefunction():
url_request+=1
if __name__ =='__main__':
somefunction()
UnboundLocalErrorが表示されます。ここで欠けている重要な概念は何ですか?
私はここでおかしくなりそうだと思います。
url_request = 0
def somefunction():
url_request+=1
if __name__ =='__main__':
somefunction()
UnboundLocalErrorが表示されます。ここで欠けている重要な概念は何ですか?
グローバル変数に割り当てています。つまり、グローバル変数としてマークする必要があります。
def somefunction():
global url_request
url_request+=1
global
ローカルスコープ内の変数に割り当てる場合、ステートメントを使用してPythonに最初に指示しない限り、ローカル変数であると見なされます。
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_request
は不変であるため、操作int
は値を変更しません。新しい値を変数名に再割り当てする必要があります。次に、この変数の識別を指定しません。したがって、インタープリターの唯一のオプションは、ローカル変数として想定することです。しかし...あなたはその価値をどこにも宣言していません....int
url_request+=1
global
url_request
UnboundLocalError
前に宣言せずに変数値で操作を実行しようとすることを意味します。これが、Python の変数/名前/スコープについて理解を深めるのに役立つことを願っています。