You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python函数为何无法直接访问全局变量?使用global关键字的原因

为什么函数里不能直接修改全局变量?

这是Python作用域规则导致的典型问题,我来给你拆解清楚:

核心原因:Python的变量赋值默认创建局部变量

当你在函数内部对变量做赋值/修改操作(比如num_files += 1,本质是num_files = num_files + 1)时,Python会默认把这个变量当成局部变量——不管全局作用域里有没有同名变量。

在你的代码里,num_files += 1的右边先引用了num_files,但Python此时已经认定它是局部变量,而这个局部变量还没被赋值,所以就会抛出类似UnboundLocalError: local variable 'num_files' referenced before assignment的错误,这就是你觉得“无法使用”的根源。

什么时候不需要global?

如果只是在函数内部读取全局变量的值,比如:

def print_num():
    print(num_files)  # 直接读取全局变量,没问题

这种情况不需要global声明,Python会自动从外层作用域找这个变量。

如何解决?用global声明

当你需要在函数里修改全局变量时,必须用global关键字明确告诉Python:“我要操作的是全局作用域里的那个变量,不是新的局部变量”。修改后的代码如下:

import os  # 别忘了补充os模块的导入,你的代码里遗漏了这一步

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

def sort():
    global num_files  # 声明使用全局变量num_files
    if not os.path.exists(temp):
        os.makedirs(temp)
    for folder_path, _, files in os.walk(source):  # 把没用的folder改成_更符合Python规范
        for file in files:
            num_files += 1
            if file.endswith("txt"):
                pass

这样函数就能正确修改全局的num_files变量了~

内容的提问来源于stack exchange,提问作者Clorky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:17:47