更新文件中的变量

时间:2018-08-12 04:09:49

标签: python python-3.x

我正在尝试更改另一个文件中的多个变量,但是除非关闭并重新输入程序,否则只有一个变量会被更新。这是代码的简单版本:

import pyVars

def loop():
    newVar = int(input('New var: '))

    temp1 = newVar
    temp2 = pyVars.varA
    temp3 = pyVars.varB

    f = open('pyVars.py', 'w')
    f.close()

    f = open('pyVars.py', 'a')
    f.write('varA = ' + str(temp1) + '\n')
    f.write('varB = ' + str(temp2) + '\n')
    f.write('varC = ' + str(temp3) + '\n')
    f.close()

    f = open('pyVars.py')
    print(f.read())
    f.close()
    loop()

loop()

然后从同一文件夹中创建的另一个文件中获取变量:

varA = 0
varB = 0
varC = 0

只有varA不断变化。我该如何解决?

2 个答案:

答案 0 :(得分:0)

这很可能与import语句有关。当您写时:

import pyVars

作为pyVars变量的副本,您会得到varA = 0,varB = 0,varC = 0。

无论更改varA,varB,varC的值有多少次,每当您尝试读取pyVars.varA,pyVars.varB时,它始终返回0,因为这就是它导入的值。我最初设置了varA = 700,varB = 800,varC = 900并进行了调试,在每个循环中,varA的初始值仍为700。我通过更改代码来检查了初始值:

from pyVar import varA, varB, varC

在调试时,即使pyVars.py文件中varA的实际值不同,varA始终返回700。

这也是为什么仅varA在pyVars.py文件上进行更新的原因。 A正在从用户那里获取输入,但是B和C设置为A和B的值,这些值被导入为0。因此它们始终保持为0。

这是我对代码摆弄超过30分钟后的理解。我很乐意被某人纠正,但是对我来说,这是一个很棒的问题/学习经验。谢谢!

编辑:所以我终于使它开始工作。它与导入语句有关。由于您正在更改导入的源文件,因此,如果需要使用新值,则需要重新加载该文件。请查看我更改的代码,该代码对我有用:

import importlib

def loop():
    import pyVars
    pyVars = importlib.reload(pyVars)
    newVar = int(input('New var: '))

    temp1 = newVar
    temp2 = pyVars.varA
    temp3 = pyVars.varB

    f = open('pyVars.py', 'w')
    f.close()

    f = open('pyVars.py', 'a')
    f.write('varA = ' + str(temp1) + '\n')
    f.write('varB = ' + str(temp2) + '\n')
    f.write('varC = ' + str(temp3) + '\n')
    f.close()

    f = open('pyVars.py')
    print(f.read())
    f.close()
    loop()

loop()

答案 1 :(得分:0)

您可以使用Python的聪明的变量交换语法,如下所示:

import pyVars

def loop():    
    newVar = int(input('New var: '))   
    pyVars.varA, pyVars.varB, pyVars.varC = newVar, pyVars.varA, pyVars.varB    
    with open('pyVars.py', 'rb') as f:
        print(f.read())
    loop()

loop()