函数的内部环境#python
在Python2.7中编写代码时,我对函数的内部环境有一个问题。以下是简单的示例代码:函数的内部环境#python,python,Python,在Python2.7中编写代码时,我对函数的内部环境有一个问题。以下是简单的示例代码: m=3 def f(x): return m*x 当我在Python控制台中键入f(5)时,它返回15,这符合我的预期。但是,当我将代码编辑为: m=3 def f(x): m=m+1 return m*x 控制台返回UnboundLocalError:assignment之前引用的局部变量“m”,我不明白为什么 我认为变量m在这两种情况下没有区别。但是,一个是正确的,而另一
m=3
def f(x):
return m*x
当我在Python控制台中键入f(5)时,它返回15,这符合我的预期。但是,当我将代码编辑为:
m=3
def f(x):
m=m+1
return m*x
控制台返回UnboundLocalError:assignment之前引用的局部变量“m”,我不明白为什么
我认为变量m在这两种情况下没有区别。但是,一个是正确的,而另一个是错误的。之所以会出现这种情况,是因为在第一种情况下,
m
没有歧义,即它是一个全局
。然而,在第二种情况下,在m=m+1
中使用m
会抛出错误,因为python查找名为m
的本地文件,但没有找到任何文件。您必须明确声明您使用的是全局
。以下内容将起作用
m=3
def f(x):
global m
m=m+1
return m*x
谢谢!但是,请参考以下代码: m=3 def f(x): 全球m m=m+1 打印(m) def g(x): 打印(m) 当我在控制台中输入f(3)时,它返回4;然后我再次输入f(3),它返回5;然后我输入g(3),它返回5。然后,当我输入m时,它返回3。为什么?谢谢 全局变量 在计算机编程中,全局变量是具有全局作用域的变量,这意味着它在整个程序中可见(因此可访问),除非有阴影。所有全局变量的集合称为全局环境或全局状态
m
可通过函数f(x)
访问变量范围
局部变量
局部变量是一个变量,它要么是函数中声明的变量,要么是传递给函数的参数。正如您在编程中可能遇到的那样,如果我们在函数中声明变量,那么我们只能在该函数中使用它们
m
只能在函数f(x)
中访问
请参见执行流程:
>>> m <---- original value
3
>>> f(3) <---- m = 3; m = m + 1; m = 4
4
>>> m
4
>>> f(3) <---- m = 4; m = m + 1; m = 5
5
>>> m
5
>>m>>f(3)>>m
4.
>>>f(3)>>m
5.
希望这能帮助你 您可以读取但不能修改全局,而不显式声明它
global
。不过,全局变量是一种反模式;你真的,真的想避免它们,尤其是在学习的时候。而且,因为你试图修改它而不声明它是全局的,它被解释为一个局部变量,这就是为什么你会出现这个错误。
def f(x):
m = 0
print(m)
return x
~ python
Python 2.7.10 (default, Oct 23 2015, 19:19:21)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> m = 3
>>>
>>>
>>> def f(x):
... global m
... m = m + 1
... print(m)
...
>>>
>>> def g(x):
... print(m)
...
>>>
>>> m <---- original value
3
>>> f(3) <---- m = 3; m = m + 1; m = 4
4
>>> m
4
>>> f(3) <---- m = 4; m = m + 1; m = 5
5
>>> m
5