Python作用域错误
此代码给出“未绑定错误”(在本查询中讨论) 这样做的原因(如答案所示)是,一旦使用赋值运算符,“x”就成为局部变量,并且由于“x”没有附加值,因此不能将其增加3。 但是看看这个代码Python作用域错误,python,variables,scope,Python,Variables,Scope,此代码给出“未绑定错误”(在本查询中讨论) 这样做的原因(如答案所示)是,一旦使用赋值运算符,“x”就成为局部变量,并且由于“x”没有附加值,因此不能将其增加3。 但是看看这个代码 x=3 def f(): print x x=3 这一次,似乎“x”没有值,因此不应该有任何问题,但发生了相同的错误 UnboundLocalError: local variable 'x' referenced before assignment 如果python在读取语句“x=3”后已经创建
x=3
def f():
print x
x=3
这一次,似乎“x”没有值,因此不应该有任何问题,但发生了相同的错误
UnboundLocalError: local variable 'x' referenced before assignment
如果python在读取语句“x=3”后已经创建了局部变量“x”,那么为什么不打印“x”
这里还值得注意的是,此代码不会产生错误
x=3
def f():
print x
x
输出为“3”(当调用f()时)
这让我很困惑,这一次在“f()”中声明的“x”不是太多了吗?那么python不应该将这个“x”添加到它的局部变量列表中吗 x的范围在f()之外 打印在没有赋值的情况下工作,因为它假定您引用的是外部作用域x。如果你稍后尝试分配,它会说“嘿,他一定是指这个,那不对”
你所联系的问题清楚地表明: Python对函数中变量的处理方式不同,这取决于是否从函数中为变量赋值 因此,在前两个示例中,您分配给变量
x
——无论您是在print
语句之前还是之后这样做——因此这意味着存在一个局部变量x
在上一个示例中,您没有分配给
x
:x
不是分配,只有x=
(或x+=
等)是分配。所以这是一个表达。因此,在上一个示例中没有局部变量x
,并且使用了函数范围之外的变量。其他人已经向我们说明了原因。此外,您可能希望看到以下内容:
x = 3
def f():
global x
print(x)
x += 3
与
局部
变量相比,出于某些原因,您可以使用全局
。取消绑定局部错误:赋值前引用了局部变量“x”
当解释器无法找到特定变量(在本例中为x)时,会发生此错误
因为它的范围。
def():
打印x
x=3
在上面的代码中,变量范围是正确的,但解释器逐行读取代码,因此会导致此错误Python编译函数中使用的变量名列表。这里将使用
x
,因此它已经为它“保留”了空间,但是它是未赋值的。因此,这意味着如果我在函数定义中不使用赋值运算符,那么该变量将不会像第三种情况那样是局部变量?@AnirudhRoy:事实上,python会在函数范围外查找同名变量。如果我想在我应该使用global函数,但是我试图知道python如何准确地解释代码和执行过程。喜欢这里的问题吗
x=3
def f():
print x
print locals()
f()
3
{}
x = 3
def f():
global x
print(x)
x += 3