我有一个模块,仅包含用作设置的变量
#Settings.py
settings = {'a' : 0, 'b': True}
这些变量在代码中以类似的方式调用:
from Settings import settings
def f(x):
return settings['a'] * x
我有一个功能可以通过修改不同的设置来测试它们
#main.py
def test() :
import Settings
Settings.settings['a'] = 2
f(x)
Settings.settings['a'] = 4
f(x)
Settings.settings['b'] = False
f(x)
....
test()
此代码适用于我的 Unix 部署系统,对设置所做的修改将传播到代码的其余部分。我在 Ipython 控制台上使用 Spyder 在 Windows 10 上进行编码和测试。
在我的测试环境中,不考虑更改,并且 main.py 中的设置从未修改。
Spyder / Ipython 不考虑对设置所做的更改会发生什么?我如何确保将来不会发生这种情况?
这与spyder缓存加载变量的方式有关。当spyder加载到特定模块时,缓存不会被调整。我已经遇到过几次这个错误,通常通过重置spyder来清除缓存对我来说很有效。
解决此问题的最佳方法是使用本地设置类,您可以像这样进行调整:
class Settings:
def __init__(self):
self.a = 1
self.b = True
然后你可以这样做:
from Settings import Settings
def f(x, settings):
return settings.a * x
def test():
settings = Settings() # Create an instance of Settings
# Modify the settings and use them
settings.a = 2
print(f"settings.a after setting to 2: {settings.a}")
print(f(x, settings)) # Use the settings instance in the function
希望这有帮助!