循环中的python变量

时间:2015-10-30 15:54:31

标签: python loops

我有一个像这样的简单代码:

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”

我不明白为什么,因为我确实定义了变量。

我尝试在函数外部定义变量stuffstuff2,但我得到错误“UnboundLocalError:在赋值之前引用的局部变量'stuff'”。 我实际上无法理解问题是什么,所以我甚至无法找到解决方案。

4 个答案:

答案 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的开头指定stuff2megaf,因此它被认为是本地的(因为您没有将其声明为全球)。因此,您无法在megaf之外访问它们。

在尝试通过分配stuff stuff2以及megaf之外的megaf来解决这个问题时,您仍然可以stuff制作stuff2和{{{{}} 1}}本地到megafstuffstuff2的使用是指局部变量,但在使用它们之前尚未分配给局部变量(请注意外部分配给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() ,如其他答案所述。