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
相关产品推荐
相关产品推荐

