在python 2.7中编码时,我对函数的内部环境有疑问。以下是简单的示例代码:
m=3
def f(x):
return m*x
当我在Python Console中键入f(5)时,它返回15,这符合我的期望。但是,当我编辑代码时:
m=3
def f(x):
m=m+1
return m*x
控制台返回 UnboundLocalError:分配前引用的局部变量'm',我不明白为什么。
我认为这两种情况之间的变量m没有区别。但是,一个是正确的而另一个不是。
答案 0 :(得分:1)
这是因为在第一种情况下, <record>
<field>
<fieldName>employee id</fieldName>
<fieldValue>2000001</fieldValue>
</field>
<field>
<fieldName>employee name</fieldName>
<fieldValue>pankaj kumar</fieldValue>
</field>
</record>
没有歧义,即它是m
。但是,在第二种情况下,global
中m
的使用会引发错误,因为python会查找名为m=m+1
的本地,但它找不到任何内容。您必须明确声明您正在使用m
。以下将有效。
global
答案 1 :(得分:0)
谢谢!但是,请参阅以下代码:
M = 3 def f(x): 全球的 M = M + 1 print(m)
def g(x): print(m)
当我在控制台中键入f(3)时,它返回4;然后我再次输入f(3),它返回5;然后我输入g(3),它返回5.然后,当我输入m时,它返回3.为什么?谢谢!
答案 2 :(得分:0)
在计算机编程中,全局变量是具有全局范围的变量,这意味着它在整个程序中是可见的(因此是可访问的),除非被遮蔽。所有全局变量的集合称为全局环境或全局状态。
m
f(x)
变量范围可以从函数 def f(x):
m = 0
print(m)
return x
中访问。
局部变量是一个变量,它是在函数内声明的变量,或者是传递给函数的参数。正如您在编程中遇到的那样,如果我们在函数中声明变量,那么我们只能在该函数中使用它们。
m
f(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
请参阅执行流程:
{{1}}
希望这可以帮到你。