2024-04-18 22:35:39 发布
网友
在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
这里有几件重要的事情需要注意。你知道吗
首先,global不是全局的。真正全局的东西,比如内置函数,存储在__builtin__模块中,或者在python3中存储在builtins模块中。global表示模块级。你知道吗
global
__builtin__
builtins
第二,当您import *时,您会得到新的变量,这些变量的名称与您import *来自的模块中的变量的名称相同,它们引用了相同的对象。这意味着如果在一个模块中重新分配变量,另一个模块就看不到变化。另一方面,对可变对象进行变异是两个模块都看到的变化。你知道吗
import *
这意味着在main.py的第一行之后:
main.py
from File2 import *
File1、File2和__main__(主脚本运行的模块)都有单独的x变量,这些变量引用相同的5对象。File2和__main__也有updateX变量引用updateX函数。你知道吗
File1
File2
__main__
x
5
updateX
第二行之后:
updateX()
只有File2的x变量被重新分配给6。(函数有一个定义位置的记录,因此它更新了File2的x,而不是__main__。)
6
第三行:
print x
打印__main__的x,仍然是5。你知道吗
这里有几件重要的事情需要注意。你知道吗
首先,
global
不是全局的。真正全局的东西,比如内置函数,存储在__builtin__
模块中,或者在python3中存储在builtins
模块中。global
表示模块级。你知道吗第二,当您
import *
时,您会得到新的变量,这些变量的名称与您import *
来自的模块中的变量的名称相同,它们引用了相同的对象。这意味着如果在一个模块中重新分配变量,另一个模块就看不到变化。另一方面,对可变对象进行变异是两个模块都看到的变化。你知道吗这意味着在
main.py
的第一行之后:File1
、File2
和__main__
(主脚本运行的模块)都有单独的x
变量,这些变量引用相同的5
对象。File2
和__main__
也有updateX
变量引用updateX
函数。你知道吗第二行之后:
只有
File2
的x
变量被重新分配给6
。(函数有一个定义位置的记录,因此它更新了File2
的x
,而不是__main__
。)第三行:
打印
__main__
的x
,仍然是5。你知道吗相关问题 更多 >
编程相关推荐