Python全局变量在函数中为空

时间:2015-11-21 00:58:28

标签: python global

所以我有一些全局变量:directory_namefile_list

他们在顶部定义,然后我在main中给他们值。我需要在名为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 个答案:

答案 0 :(得分:3)

您正在主要功能中隐藏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
    ...

请记住,正如评论中所提到的,使用全局变量并不是一种好习惯,从长远来看可能导致错误的代码(就不可读/不可维护/错误而言)。