在Python中有些东西一直在困扰我(哈!)(我使用2.7)。这是我在运行此代码时获得NameError: global name 'x' is not defined
:
def function1():
x = 1
return 0
def function2():
function1()
print(x)
return 0
function2()
对我来说这不是一个严重的问题,但我真的好奇为什么这不会打印1.它在我的脑海中是有道理的。定义变量x
的函数在调用之前定义,函数在print(x)
之前调用。我真的不明白为什么这段代码不起作用。也许我正在考虑的方式是有缺陷的。无论哪种方式,为什么那个代码不打印1?在此先感谢您的帮助!
答案 0 :(得分:3)
是的,你的想法有缺陷。 x
中定义的变量function1
是该函数的本地变量。它在其他任何地方都不存在。当你用另一个函数调用一个函数时,这并不意味着来自被调用函数的所有变量都被转储到调用函数中。仅传回返回值。如果要在第二个函数中使用x
,则应从function1
返回。 (即使这样,它也不会在x
中创建一个名为function2
的变量。它只会返回值,然后您可以将其分配给{中的变量{ {1}}如果你想要,或打印,或其他什么。)
答案 1 :(得分:0)
使用global x
作为第一行。这将使您的代码工作。但是,无论如何,在函数之间传递变量并不是一个好习惯。返回值和使用参数是一种很好的做法。
如果您正在测试变量共享,那么您正在使用全局变量。为此,与javascript不同,你需要在尝试获取它之前使用global x
,就像在php中一样(除非你在php中没有错误,除非使用严格模式)。
答案 2 :(得分:0)
x
范围仅 function1()
内部,这就是为什么您无法在x
内打印function2()
,甚至如果您正在致电function1()
(当您从function1()
返回时,x
将被销毁)
答案 3 :(得分:0)
因为function1
范围内的变量x
是本地的,function2
不是"""这个变量。