x=True
def stupid():
x=False
stupid()
print x
答案 0 :(得分:18)
您不需要在Python中声明函数局部变量。 “x = False”指的是x local到stupid()。如果你真的想修改愚蠢的全局x:
def stupid():
global x
x=False
答案 1 :(得分:10)
要回答您的下一个问题,请使用global
:
x=True
def stupid():
global x
x=False
stupid()
print x
答案 2 :(得分:6)
因为x的作用域是函数stupid()的本地作用域。一旦你调用了函数,它结束了,你就超出了它的范围,你打印了在函数stupid()之外定义的“x”的值 - 以及在里面定义的x 函数stupid()的em>不再存在于堆栈中(一旦该函数结束)
在评论后修改:
外部 x在您打印时被引用,就像您一样。
内部 x只能在函数stupid()内部引用。所以你可以打印那个函数的内部,这样你就可以看到x里面的值。
关于“全球”
答案 3 :(得分:5)
如果该代码全部在函数内,global
不起作用,因为x
不是全局变量。在Python 3.x中,他们引入了nonlocal
关键字,无论是在顶级还是在函数内部,都可以使代码工作:
x=True
def stupid():
nonlocal x
x=False
stupid()
print x
答案 4 :(得分:3)
如果要从python中的方法访问全局变量x,则需要明确地这样做:
x=True
def stupid():
global x
x=False
stupid()
print x
答案 5 :(得分:2)
函数stupid()中的x是一个局部变量,所以你真的有两个名为x的变量。
答案 6 :(得分:2)
在函数x = False之前添加“global x”,它将打印True。否则,它有两个“x”,每个都在不同的范围内。
答案 7 :(得分:2)
x
内对stupid()
进行了分配,因此Python会在x
内创建一个新的stupid()
。x
stupid()
内的正在阅读,那么Python实际上会使用全局x
,这就是你想要的。x
,请将global x
添加为stupid()
内的第一行。