为什么这个变量不是全局变量(不能在函数中使用)?

时间:2020-12-30 14:53:09

标签: python

我知道我必须使用 global 关键字来访问变量,但我的问题是 为什么它不能在函数内部使用?

source = "C:/ALL IN ONE/Test File"
temp = "C:/ALL IN ONE/Temp Folder"
num_files = 0

def sort():
    if not os.path.exists(temp):
        os.makedirs(temp)
        
    for folder_path, folder, files in os.walk(source):
        for file in files:
            num_files += 1   # I can't seem to access the variable "num_files" outside the function
            if file.endswith("txt"):
                pass

2 个答案:

答案 0 :(得分:1)

您在函数中定义变量 num_files = 0 def sort(): global num_files # rest of your code ,如下所示:

num_files += 1

在不将其声明为全局的情况下,要执行基本上是 num_files = num_files + 1num_files,该函数会搜索已初始化的局部变量 UnboundLocalError: local variable referenced before assignment 的声明以访问其右侧的值您的作业的一部分,但没有,因此它引发了 Weight: 异常。

documentation

答案 1 :(得分:1)

这是scope的问题。您的变量 num_files 实际上在 global 范围内,但是一旦您打开一个函数,您就会离开全局范围。在这种情况下,函数内部的变量是函数 sort 的局部变量。一定要从 globabl 范围接收您的变量,正如您已经提到的那样,您需要关键字 global