Python函数中全局变量为空的问题

3

我有一些全局变量:directory_namefile_list

它们在顶部被定义,在主函数中被赋值。我需要在名为checkDirectory(blocknum)的函数中使用它们的值。如果在调用该函数之前打印它们的值,它们是正确的,但在函数中它们是空的。这是一些代码:

file_list = []
directory_name = ""

def checkDirectory(blocknum):
    global directory_name
    global file_list
    directory = tokenize(open(directory_name + '/' + file_list[blocknum], 'r').read())

main():
    try:
        directory_name = sys.argv[1] 
        if not os.path.exists(directory_name):
            print("This is not a working directory.")
            return
    except:
        directory_name = os.getcwd()

    files = os.listdir(directory_name)
    file_list = sorted(files, key=lambda x: int((x.split("."))[1].strip()))
    ....
    checkDirectory(26)

这是一个基本的100行脚本,虽然我可以传入变量,但我将不得不为三到四个递归函数重复此操作,因此我宁愿不必每次都这样做。


1
可能需要更多的信息来帮助...设置值的代码是什么样子的,它们是否在其他地方被引用?请注意,对于任何比一次性脚本更复杂的东西,使用类比全局变量更好。 - Scott A
为什么你不能把它们也传递给函数呢?你只需要传递directory_name和file_list[blocknum]。 - user4171906
1个回答

6

在主函数中,您正在追踪directory_namefile_list。由于这些变量在该范围内未知,它们会在本地创建。为了操作全局变量,您需要在main()中声明它们为全局变量:

file_list = []
directory_name = ""

def checkDirectory(blocknum):
    global directory_name
    global file_list
    directory = tokenize(open(directory_name + '/' + file_list[blocknum], 'r').read())

main():
    global directory_name
    global file_list
    ...

请记住,在评论中提到的,使用全局变量不是良好的编程实践,长期来看可能会导致糟糕的代码(不可读/难以维护/错误)的产生。

在这种情况下,你如何在不使用全局变量的情况下解决这个问题? - Guillaume G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接