如何更改另一个文件中定义的变量?

时间:2018-03-12 15:14:31

标签: python

我有两个文件:test1.py和test2.py

在test1.py中:

a = 1
def printa():
    print a

在test2.py中:

from test1 import a, printa
a = 2
printa()

我得到了

1

但如果我将test2.py更改为

import test1
test1.a = 2
printa()

我改为 2 。它是如何工作的?

2 个答案:

答案 0 :(得分:0)

您遇到的是变量范围。

如果导入所有test1,则可以访问测试1中的变量,因为它们在您当前的操作范围内,因此直接访问它并更改它,允许您打印2。

在你的第二个片段中,你定义了一个局部变量a = 2,它与test1.a无关,因此在你打印时,它会显示test1.a值为1。

换句话说,当你引用test1.a时,你正在访问一个变量,但是当你定义一个本地a = 2时,这是一个与printa()引用完全不同的变量。 python中的变量在其范围内创建和销毁。因此,您可以在相同的python脚本中使用相同的名称创建多个变量,而不会产生不需要的功能,只要它们封装在其范围内。

尝试打印两个版本以查看差异。

import test1

a=2
print a
print test1.a

答案 1 :(得分:0)

当您指定a=2时,它位于test2.py的范围内,而test1.printa()方法仍然保留对来自test1的变量a的引用。

要测试此尝试

import test1
from test1 import a, printa

a = 2
a #will return 2

test1.a #will still return 1

换句话说,当你设置a = 2时,你没有改变类变量test1.a,它与内存中test2.py中定义的类别不同。