Python 更新文件中的变量
我试图更改另一个文件中的多个变量,但只有一个变量会得到更新,除非我关闭并重新进入程序。这是代码的简单版本:Python 更新文件中的变量,python,python-3.x,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('pyV
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()
from pyVar import varA, varB, varC
我从同一文件夹中创建的另一个文件中获取变量:
varA = 0
varB = 0
varC = 0
只有瓦拉一直在变。如何修复此问题?这很可能与import语句有关。当你写作时:
import pyVars
将varA=0、varB=0、varC=0作为pyVars变量的副本
无论您更改varA、varB、varC的值多少次,每当您尝试读取pyVars.varA、pyVars.varB时,它总是返回0,因为这是它导入的值。我初始设置varA=700,varB=800,varC=900并进行调试,在每个循环中,varA的初始值仍然是700。我通过更改代码来检查初始值:
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()
from pyVar import varA, varB, varC
调试时,varA始终返回700,即使在pyVars.py文件中varA的实际值不同
这也是为什么在pyVars.py文件上只更新varA的原因。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()
您可以使用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()
要更改
varB
和varC
,您必须对temp2
和temp3
执行一些操作。事实上,你只是一遍又一遍地读写相同的值。我该怎么处理它们呢?我已经删除了对我答案的两次编辑,因为它们显然是不正确的。目前正在处理您的代码。@Wyxlor我不明白您想做什么。我现在看到了,并在下面的答案中发布了如何做。我已经用现在适合我的代码更新了答案。基本上,我已经将导入移动到循环中,并添加了一个重载,因此每次都使用更新的值。希望这能解决您的问题您可以使用变量交换语法更新所有变量。请看我的答案。我找到了另一种方法-使用importlib中的reload函数。它刷新库并更新变量。这正是我昨天在上面的代码中建议的:)只是好奇,为什么你以二进制读取方式打开文件而不是定期打开?老实说,这是习惯使然。但这是有原因的,特别是如果你想让你的代码跨平台工作(例如Linux、Windows)。医生们在这里谈到了这一点:这是否回答了你最初的问题?如果没有,请告诉我为什么没有。