Python全局范围问题

2024-04-18 22:35:39 发布

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

在Python中修改不同文件之间的全局变量时遇到问题。例如:

文件1.py:

x = 5

文件2.py:

from File1 import *

def updateX():
    global x
    x += 1

你知道吗主.py地址:

from File2 import * 

updateX()
print x #prints 5

Tags: 文件frompyimport地址defprintsglobal
1条回答
网友
1楼 · 发布于 2024-04-18 22:35:39

这里有几件重要的事情需要注意。你知道吗

首先,global不是全局的。真正全局的东西,比如内置函数,存储在__builtin__模块中,或者在python3中存储在builtins模块中。global表示模块级。你知道吗

第二,当您import *时,您会得到新的变量,这些变量的名称与您import *来自的模块中的变量的名称相同,它们引用了相同的对象。这意味着如果在一个模块中重新分配变量,另一个模块就看不到变化。另一方面,对可变对象进行变异是两个模块都看到的变化。你知道吗

这意味着在main.py的第一行之后:

from File2 import *

File1File2__main__(主脚本运行的模块)都有单独的x变量,这些变量引用相同的5对象。File2__main__也有updateX变量引用updateX函数。你知道吗

第二行之后:

updateX()

只有File2x变量被重新分配给6。(函数有一个定义位置的记录,因此它更新了File2x,而不是__main__。)

第三行:

print x

打印__main__x,仍然是5。你知道吗

相关问题 更多 >