觉得我要疯了。
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
is int
,int
是不可变的,所以操作url_request+=1
不会改变值,它应该为变量名重新分配新值。其次,您没有global
为此变量指定标识。所以解释器只有一个选择 - 假设url_request
为局部变量。但是......你没有在任何地方声明它的价值......
UnboundLocalError
意味着您尝试使用变量值执行操作而不事先声明它。希望这将帮助您更多地了解 Python 变量/名称/范围。