Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python作用域错误_Python_Variables_Scope - Fatal编程技术网

Python作用域错误

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”就成为局部变量,并且由于“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