我有一个像这样的简单代码:
def function():
ciao = stuff + stuff2
return ciao
def megaf():
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function()
megaf()
运行代码时出现的错误是
NameError:未定义全局名称“stuff”
我不明白为什么,因为我确实定义了变量。
我尝试在函数外部定义变量stuff
和stuff2
,但我得到错误“UnboundLocalError:在赋值之前引用的局部变量'stuff'”。
我实际上无法理解问题是什么,所以我甚至无法找到解决方案。
答案 0 :(得分:1)
变量stuff和stuff2仅在megaf()中已知。 将stuff和stuff2传递给function(),如下所示:
def function(stuff, stuff2):
ciao = stuff + stuff2
return ciao
def megaf():
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function(stuff, stuff2)
megaf()
答案 1 :(得分:1)
在python中,如果在函数中创建变量,该变量将在该函数的末尾不再存在。
def foo():
i = 7
def bar():
n = i + 7 #This will not work.
如果您希望function
将两个数字加在一起,将这两个数字作为参数传递,您应该怎么做,如下所示:
def sum(num1, num2):
return num1 + num2
然后在megaf
for t in range(10):
stuff += 1
stuff2 += 2
print sum(stuff, stuff2)
答案 2 :(得分:0)
您必须为函数添加参数。
def function(stuff, stuff2)
然后在调用函数时执行:
print function(stuff, stuff2)
这会将两个变量添加到function()
。
您的整体代码应如下所示:
def function(stuff, stuff2):
ciao = stuff + stuff2
return ciao
def megaf():
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function(stuff, stuff2)
megaf()
除非您创建全局变量或插入参数,否则该函数不会读取变量。
答案 3 :(得分:0)
在python变量中有两种形式,本地变量和全局变量。局部变量只能在函数内部看到(并且每次调用函数时它们都不同),而全局可以从任何地方看到(并且是持久的)。
还可以使用具有相同名称的全局变量和局部变量。如果函数中有局部变量,则它是名称引用的局部变量。
为了确定函数中的变量是本地变量还是全局变量,您必须检查它的使用方式。基本上它被认为是本地的,除非:
global
声明在您第一次尝试时,您会在stuff
的开头指定stuff2
和megaf
,因此它被认为是本地的(因为您没有将其声明为全球)。因此,您无法在megaf
之外访问它们。
在尝试通过分配stuff
stuff2
以及megaf
之外的megaf
来解决这个问题时,您仍然可以stuff
制作stuff2
和{{{{}} 1}}本地到megaf
。 stuff
和stuff2
的使用是指局部变量,但在使用它们之前尚未分配给局部变量(请注意外部分配给stuff
和{ {1}}是不同的全局变量。
有两个解决方法。首先,脏的是简单地将它们声明为全局:
stuff2
这很脏,因为它通常被认为是使用全局变量的不良做法。另一种解决方案是将它们作为参数传递给def function():
ciao = stuff + stuff2
return ciao
def megaf():
global stuff, stuff2
stuff = 1
stuff2 = 3
for t in range(10):
stuff += 1
stuff2 += 2
print function()
,如其他答案所述。