Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中的python变量_Python_Loops - Fatal编程技术网

循环中的python变量

循环中的python变量,python,loops,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” 我

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

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。
我无法真正理解问题所在,因此我甚至无法尝试找出解决方案

变量stuff和stuff2仅在megaf中已知。 将stuff和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 sum(num1, num2):
    return num1 + num2

您必须向函数中添加参数

def function(stuff, stuff2)
def foo():
    i = 7

def bar():
    n = i + 7 #This will not work.
然后在调用函数时执行以下操作:

print function(stuff, stuff2)
这会将两个变量添加到函数中

def function(stuff, stuff2)
def foo():
    i = 7

def bar():
    n = i + 7 #This will not work.
您的总体代码应该如下所示:

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 function(stuff, stuff2)
def foo():
    i = 7

def bar():
    n = i + 7 #This will not work.
如果希望函数将两个数字相加,则应将这两个数字作为参数传递,如下所示:

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 sum(num1, num2):
    return num1 + num2
然后是兆欧


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

也可以使用相同名称的全局变量和局部变量。如果函数中有一个局部变量,它就是名称所指的局部变量

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

它使用全局语句声明为全局 它没有被分配到。 在第一次尝试中,您在megaf的开头将其分配给stuff和stuff 2,因此它被认为是本地的,因为您没有将其声明为全局的。因此,您无法在megaf之外访问它们

在您尝试通过在megaf之外分配给stuff和stuff 2来解决此问题时,您仍然在megaf中分配给它们,使stuff和stuff 2成为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()

这是肮脏的,因为使用全局变量通常被视为糟糕的做法。另一种解决方案是将它们作为参数传递给函数,如其他答案中所述。

您必须将stuff和stuff2传递给函数。变量有一种称为作用域的东西。这需要深入的解释;例如,试着阅读。