x=True
def stupid():
x=False
stupid()
print x
Run Code Online (Sandbox Code Playgroud)
Jon*_*ehl 18
您不需要在Python中声明函数局部变量."x = False"指的是x local到stupid().如果你真的想修改愚蠢的全局x:
def stupid():
global x
x=False
Run Code Online (Sandbox Code Playgroud)
Gre*_*ill 10
要回答您的下一个问题,请使用global:
x=True
def stupid():
global x
x=False
stupid()
print x
Run Code Online (Sandbox Code Playgroud)
因为x的作用域是函数stupid()的局部作用域.一旦你调用了函数,它结束了,你就超出了它的范围,你打印了在函数stupid()之外定义的"x"的值 - 以及在函数stupid()中定义的x 在堆栈上不再存在(一旦该函数结束)
评论后编辑:
在外部,当你打印它x被引用,就像你一样.
该内部 x只,而被引用的函数里面愚蠢的().所以你可以打印那个函数的内部,这样你就可以看到x里面的值.
关于"全球"
如果该代码全部在函数内部,global则不起作用,因为那时x不会是全局变量.在Python 3.x中,他们引入了nonlocal关键字,无论是在顶层还是在函数内部,都可以使代码工作:
x=True
def stupid():
nonlocal x
x=False
stupid()
print x
Run Code Online (Sandbox Code Playgroud)