试图理解Python中的函数环境

时间:2012-02-26 03:10:10

标签: python function

我正在尝试了解功能环境(全局,本地)。具体来说,当有一个已经全局定义的嵌套函数时,我会感到很困惑,例如:

def g(x):
    print(x)

def f(f):
    f(1)

f(g)

有人可以帮助我这个概念吗?我将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:4)

Python使用字典来保存本地和全局变量。在查找变量引用时,它将首先查看本地字典。如果要在全局字典中引用变量,请将global关键字放在其前面。

另请参阅this问题的答案以获取更详细的信息。

答案 1 :(得分:0)

我同意user18044,但是你对'f(f)'的困惑是什么?我同意这可能真的令人困惑,特别是在非类型语言中。 'f'的参数是一个函数句柄,它具有名为'f'的本地类型作用域。 python决定使用哪个'f'的方式由18044解释.Python在函数定义中查看名称'f',本地参数'f'对全局名称'f'进行预测,就像我们做的那样在一个函数中有一个全局变量'dude'和一个局部变量'dude'。当地覆盖全球。希望这有帮助,并且有意义。 : - )

答案 2 :(得分:0)

函数的locals包含传入的所有内容,以及分配给global(或{3.}中的nonlocal)的每个变量。

全局变量包含可在全局范围内看到的所有内容,包括函数本身。

当引用名称时,首先在本地中查找它,然后在本地中找不到全局内容。

运行语句f(g)时,语句本身处于全局范围,因此没有本地语句。全局变量中都可以找到fg:它们都是函数。调用由def f...定义的函数,由def g...定义的函数作为参数传递。

f(f)运行时,f位于函数的本地。它与传入的值绑定,该值是def g...定义的函数。函数体具有语句f(1)1是常量,不需要查找。在本地查找f,找到传入的函数。它是 - 在全球范围内称为g的函数 - 被称为。

因此,g同样使用绑定到局部变量1的值x运行。这被转发到函数print(在3.x中;在2.x中,print是一个关键字,因此print x是一个语句),它打印值{{1} }。