从外部文件导入值(互连)

时间:2015-03-18 17:01:40

标签: python python-2.7 python-import

我获得了一个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_maini_datap的更改值。 像这样:

    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()都应该更改。

1 个答案:

答案 0 :(得分:0)

在python中,整数和浮点数是不可变的。因此,当您执行p = i_data时,pi_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.    

您可以按预期使用此工作的唯一方法是制作pi_data可变数据类型(如列表),然后更改i_data内的值,如{{1 }}