循环中的python变量

2024-09-29 20:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我试图在函数外同时定义变量stuffstuff2,但出现了错误“UnboundLocalError:localvariable'stuff'referenced before assignment”。 我真的不明白问题出在哪里,所以我甚至想不出解决这个问题的办法。你知道吗


Tags: 代码inforreturn定义def错误range
3条回答

在python中,变量有两种类型:局部变量和全局变量。局部变量只能从函数内部看到(每次调用函数时它们都是不同的),而全局变量可以从任何地方看到(并且是持久的)。你知道吗

还有可能有一个全局和局部变量具有相同的名称。如果函数中有一个局部变量,那么名称所指的就是局部变量。你知道吗

为了确定函数中的变量是局部变量还是全局变量,必须检查它的使用方式。基本上假设它是本地的,除非:

  • 它使用global语句声明为全局的
  • 它没有被分配到。你知道吗

在第一次尝试中,您将stuffstuff2分配在megaf的开头,因此它被认为是局部的(因为您没有声明它是全局的)。因此,您不能在megaf之外访问它们。你知道吗

在您尝试通过将stuffstuff2分配给megaf之外的megaf来解决这个问题时,您仍然将stuffstuff2本地分配给megafstuffstuff2的用法指的是局部变量,但是在使用它们之前您还没有将它们赋值给局部变量(注意,stuffstuff2的外部赋值是全局变量,这是不同的)。你知道吗

有两个解决办法。首先,肮脏的一点是简单地声明它们是全局的:

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,如其他答案中所述。你知道吗

在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仅在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()

相关问题 更多 >

    热门问题