如何处理python中变量的作用域

如何处理python中变量的作用域,python,function,scope,Python,Function,Scope,我有一个python模块,其中包含用于生成大型数组的代码,并且它包含多个用于生成大型数组的函数。这就是我现在拥有它的方式: var1 = 0 var2 = 0 var3 = 0 var4 = 0 var5 = 0 var6 = 0 def main(): foo() moo(var1,var2) noo(var6) def foo(): Math using vars def moo(): More math def noo(): More mat

我有一个python模块,其中包含用于生成大型数组的代码,并且它包含多个用于生成大型数组的函数。这就是我现在拥有它的方式:

var1 = 0
var2 = 0
var3 = 0
var4 = 0
var5 = 0
var6 = 0
def main():
    foo()
    moo(var1,var2)
    noo(var6)
def foo():
    Math using vars
def moo():
    More math
def noo():
    More math

然而,我不能使用vars1-6而不首先在它们各自的函数中违抗它们,因为它抛出了一个“赋值前引用”异常。这样做的最佳方式似乎是使用global,但这似乎遭到了强烈的反对。为什么不推荐global?在这里用可以吗?我还应该怎么做呢?

您需要将这些变量定义为全局变量,以便在函数中使用。这里有一个例子。
最好将变量作为参数传递给这些函数:

def main(var1, var2, var3, var4, var5, var6):
    foo(var1, var2, var3)
    moo(var2,var3)
    noo(var5)
    ...

def foo(var1, var2, var3):
    Math using vars
def moo(var2, var3):
    More math
def noo(var5):
    More math

然后用全部6个参数调用main。

global不受欢迎吗?在这种情况下使用是否可以接受?是的,应该避免使用全局变量,除非它只是一段临时代码,最好作为参数传递。