函数中的Python全局变量为空

2024-10-01 07:15:13 发布

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

所以我有几个全局变量:directory_name和{}

它们在顶部定义,然后我在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行脚本,我可以传入变量,但是对于三个或四个递归的函数,我必须这样做,所以我不希望每次都这样做。在


Tags: 函数name定义osmainnotfilesglobal
1条回答
网友
1楼 · 发布于 2024-10-01 07:15:13

您正在主函数中隐藏directory_name和{}。因为这些变量在这个范围内是未知的,所以它们是在本地创建的。为了操作全局变量,还需要在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
    ...

请记住,正如评论中所提到的,使用全局参数不是一个好的做法,从长远来看可能会导致错误的代码(就不可读/不可维护/有缺陷而言)。在

相关问题 更多 >