我有这样一个简单的代码:
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: global name 'stuff' is not defined
我不明白为什么,因为我确实定义了变量。你知道吗
我试图在函数外同时定义变量stuff
和stuff2
,但出现了错误“UnboundLocalError:localvariable'stuff'referenced before assignment”。
我真的不明白问题出在哪里,所以我甚至想不出解决这个问题的办法。你知道吗
在python中,变量有两种类型:局部变量和全局变量。局部变量只能从函数内部看到(每次调用函数时它们都是不同的),而全局变量可以从任何地方看到(并且是持久的)。你知道吗
还有可能有一个全局和局部变量具有相同的名称。如果函数中有一个局部变量,那么名称所指的就是局部变量。你知道吗
为了确定函数中的变量是局部变量还是全局变量,必须检查它的使用方式。基本上假设它是本地的,除非:
global
语句声明为全局的在第一次尝试中,您将
stuff
和stuff2
分配在megaf
的开头,因此它被认为是局部的(因为您没有声明它是全局的)。因此,您不能在megaf
之外访问它们。你知道吗在您尝试通过将
stuff
和stuff2
分配给megaf
之外的megaf
来解决这个问题时,您仍然将stuff
和stuff2
本地分配给megaf
。stuff
和stuff2
的用法指的是局部变量,但是在使用它们之前您还没有将它们赋值给局部变量(注意,stuff
和stuff2
的外部赋值是全局变量,这是不同的)。你知道吗有两个解决办法。首先,肮脏的一点是简单地声明它们是全局的:
这是肮脏的,因为使用全局变量通常被认为是糟糕的做法。另一种解决方案是将它们作为参数传递给
function
,如其他答案中所述。你知道吗在python中,如果在函数中生成一个变量,那么该变量将在该函数的末尾不再存在。你知道吗
如果您想让
function
将两个数字相加,应该做什么,将这两个数字作为参数传递,如下所示:然后在
megaf
变量stuff和stuff2仅在megaf()中已知。 将stuff和stuff2传递给function(),如下所示:
相关问题 更多 >
编程相关推荐