蟒蛇变量
我有一个简单的代码像这样的:蟒蛇变量
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:本地变量'的东西引用前分配”。 我实际上无法理解问题是什么,所以我甚至无法找出解决方案。
在python变量有两种风格,本地和全局。局部变量只能在函数内部看到(而且每次调用函数都是不同的),而全局可以从任何地方看到(并且是持久的)。
此外,还可以使用具有相同名称的全局变量和局部变量。如果函数中有一个局部变量,则它是该名称引用的局部变量。
为了确定一个函数中的变量是局部还是全局的,你必须检查它是如何使用的。基本上它的假设,除非是本地的:
- 它声明为全球使用
global
statment - 它没有被分配到。
在你第一次尝试分配给stuff
和stuff2
在megaf
所以它被认为地方开始(因为你没有把它声明为全局)。因此,您无法在megaf
之外访问它们。
在你尝试将其分配给stuff
和stuff2
以外的megaf
你仍然分配给他们megaf
使stuff
和stuff2
本地megaf
来解决这个问题。 stuff
和stuff2
的用法引用了局部变量,但由于在使用它们之前尚未分配给局部变量(请注意,外部赋值为stuff
和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()
这很脏,因为它通常被认为是穷人的做法使用全局变量。另一种解决方案是将它们作为参数传递给function
,如其他答案中所述。
变量stuff和stuff2只在megaf()中是已知的。 通的东西,stuff2到()函数是这样的:
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()
你必须参数添加到函数。
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()
功能将无法读取变量,除非你要么使全局变量或插入参数。
在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)
你必须将'stuff'和'stuff2'传入'function'。 –
变量有一个叫做**范围**的东西。这需要深入的解释;例如,尝试阅读[此链接](http://python-textbok.readthedocs.org/en/latest/Variables_and_Scope.html)。 – Claudiu