我获得了一个Python文件,其中定义了大约100个变量。我不想把所有变量都放到主文件中。我制作了一个模拟问题的程序,如下所述。
我有三个文件(两个.py和一个.txt)。一个.py文件,其中定义了一个全局变量(i_data
),以及一个依赖于变量p
的全局变量(i_data
)。 i_data
表示的值有一个初始值(第一次计算p
时需要)。在这个文件中,我们做了一个定义,其中全局变量(i_data
)被更改为匹配main(i_main
)中的当前值。
该文件看起来像这样(testdata.py):
i_data = 1.
p = i_data
def change(i_main):
global i_data
i_data = i_main
print "i_inside = " +str(i_data)
第二个文件从txt文件中获取值i_main
,并调用函数change
以更改i_data
以匹配i_main
。
此文件如下所示(testmain.py):
from testdata import *
from numpy import *
def main():
data = loadtxt('file.txt') #load the data
for j in range(3):
i_main = data[j] #changing i_main to match the data
change(i_main) #changing i_data to i_main
print "p = " +str(p) #p should equal i_data, which should equal i_main. So I want p=i_main
print "i_main = " +str(i_main)
print "i_data = " +str(i_data)
main()
txt文件看起来像这样(file.txt):
1
2
3
我希望程序打印i_main
,i_data
和p
的更改值。
像这样:
i_inside = 1.0
p = 1.0
i_main = 1.0
i_data = 1.0
i_inside = 2.0
p = 2.0
i_main = 2.0
i_data = 2.0
i_inside = 3.0
p = 3.0
i_main = 3.0
i_data = 3.0
而是打印出来:
i_inside = 1.0
p = 1.0
i_main = 1.0
i_data = 1.0
i_inside = 2.0
p = 1.0
i_main = 2.0
i_data = 1.0
i_inside = 3.0
p = 1.0
i_main = 3.0
i_data = 1.0
如何让程序提供想要的结果?优选地,不将(所有)变量移动到主文件。每次从文件testmain.py调用i_data
时,全局变量change()
都应该更改。
答案 0 :(得分:0)
在python中,整数和浮点数是不可变的。因此,当您执行p = i_data
时,p
和i_data
会引用相同的数据。但是,当您执行i_data = i_main
时,您正在更改i_data
,因此它指向与i_main
相同的数据,而不是p
指向的数据。因此,当您更改i_data
时,您不再更改p
。
i_data = 1. % set the name i_data to refer to the data holding the value 1.
p = i_data % set the name p to refer to the data holding the value 1.
i_main = 5. % set the name i_main to refer to the data holding the value 5.
i_data = i_main % set the name i_data to refer to the data holding the value 5.
您可以按预期使用此工作的唯一方法是制作p
和i_data
可变数据类型(如列表),然后更改i_data
内的值,如{{1 }}