我正在尝试更改另一个文件中的多个变量,但是除非关闭并重新输入程序,否则只有一个变量会被更新。这是代码的简单版本:
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不断变化。我该如何解决?
答案 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()