Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 - Fatal编程技术网

函数的内部环境#python

函数的内部环境#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在这两种情况下没有区别。但是,一个是正确的,而另一

在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
没有歧义,即它是一个
全局
。然而,在第二种情况下,在
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