理解一个超简单的函数输出

时间:2016-02-07 13:15:46

标签: python python-2.7

我不明白为什么输出是这样的,而不是1,3,1。

x = 1 
def f():
    global x
    y = x
    x = 2
    return x + y 

print x 
print f() 
print x 

##output:
##
##1
##3
##2

好吧,我明白函数“内部”,global x告诉函数查看函数外部的x(x = 1)。然后我们将这个x = 1放入y;因此,y = 1。现在,local x为2,因此x + y = 2 + 1 = 3。

那么为什么最后print x会产生2?为什么以及如何让舆论“选择”返回本地/全球x?这两个命令都在函数statemante之外..

谢谢!

2 个答案:

答案 0 :(得分:5)

no local x; global语句在函数全局中使用变量。

因此,x = 2会改变全局x

Python编译器需要事先知道函数中的名称是本地名称还是全局名称。默认情况下,将名称视为全局,除非绑定到名称(赋值是名称绑定的一种形式),此时所有在函数中使用变量变得本地化。您可以使用global语句覆盖此行为,该语句会将名称的所有使用修复为全局,即使名称已绑定。

请参阅Python参考文档中的Naming and binding section

  

如果名称绑定在块中,则它是该块的局部变量。

global statement documentation

  

global语句是一个声明,它包含整个当前代码块。这意味着列出的标识符将被解释为全局变量。

您无法在单个范围内将名称视为全局和本地名称。请改用其他名称,就像使用y一样。

答案 1 :(得分:1)

global关键字对整个块(对于函数体)有效,因此基本上没有本地xhttps://docs.python.org/2/reference/simple_stmts.html#grammar-token-global_stmt