Jon*_*ehl 18

您不需要在Python中声明函数局部变量."x = False"指的是x local到stupid().如果你真的想修改愚蠢的全局x:

def stupid():
    global x
    x=False
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果在函数内部执行`print x`,它将使用全局`x`.它只是*赋值*创建新的局部变量. (8认同)

Gre*_*ill 10

要回答您的下一个问题,请使用global:

x=True
def stupid():
    global x
    x=False
stupid()
print x
Run Code Online (Sandbox Code Playgroud)


Sev*_*Sev 6

因为x的作用域是函数stupid()的局部作用域.一旦你调用了函数,它结束了,你就超出了它的范围,你打印了在函数stupid()之外定义的"x"的值 - 以及函数stupid()中定义的x 在堆栈上不再存在(一旦该函数结束)

评论后编辑:

外部,当你打印它x被引用,就像你一样.

内部 x只,而被引用的函数里面愚蠢的().所以你可以打印那个函数的内部,这样你就可以看到x里面的值.

关于"全球"

  • 它显然可以解决这个问题
  • 经常使用所有这些并不是一个好主意
  • 导致可读性和可伸缩性问题(可能更多)
  • 根据您的项目,您可能需要重新考虑使用本地函数内定义的全局变量.


new*_*cct 5

如果该代码全部在函数内部,global则不起作用,因为那时x不会是全局变量.在Python 3.x中,他们引入了nonlocal关键字,无论是在顶层还是在函数内部,都可以使代码工作:

x=True
def stupid():
    nonlocal x
    x=False
stupid()
print x
Run Code Online (Sandbox Code Playgroud)