为什么这个python程序打印为True

时间:2009-08-07 01:35:48

标签: python

x=True
def stupid():
    x=False
stupid()
print x

8 个答案:

答案 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 不再存在于堆栈中(一旦该函数结束)

在评论后修改:

外部 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,这就是你想要的。
  • 要强制Python使用全局x,请将global x添加为stupid()内的第一行。