函数的内部环境#python

时间:2016-06-27 06:24:29

标签: python

在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没有区别。但是,一个是正确的而另一个不是。

3 个答案:

答案 0 :(得分:1)

这是因为在第一种情况下, <record> <field> <fieldName>employee id</fieldName> <fieldValue>2000001</fieldValue> </field> <field> <fieldName>employee name</fieldName> <fieldValue>pankaj kumar</fieldValue> </field> </record> 没有歧义,即它是m。但是,在第二种情况下,globalm的使用会引发错误,因为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}}

希望这可以帮到你。