Python 在另一个模块中更改变量并保存它



我有一个名为my_package的简单python包,其中包含三个文件:

初始化.py

from .a import func
from .settings import var

settings.py

var = 1

a.py

import .settings
def func():
    settings.var = 2

当我将此包添加到 PATH 并导入它时,我在脚本下运行,无法获得预期的结果:

import my_package
my_package.func()
print(my_package.var)

我希望得到"2",但它返回"1"。我在这里做错了什么?

发生这种情况是因为在import my_package期间,my_package.var被设置为引用值为 1 的 int 。运行my_package.func()后,不会触及此引用,但是my_package.settings.var更改为指向值为 2 的新int对象。

import my_package  # imports my_package.var with value 1 
my_package.func()  # sets my_package.settings.var to 2
print(my_package.var)  # prints 1
print(my_package.settings.var)  # prints 2

如果您尝试对列表执行相同的操作,则可以使其以不同的方式工作。通过不创建新对象my_package.settings.list_var而是修改现有列表中的条目。

# __init__.py
from .a import func
from .settings import list_var

_

# settings.py
list_var = [1]

_

# a.py
import .settings
def func():
    settings.list_var[0] = 2

现在运行类似的代码实际上会改变list_var

import my_package  # imports my_package.var with value 1 
print(my_package.var[0])  # prints 1
my_package.func()  # sets list_var to [2]
print(my_package.var[0])  # prints 2

相关内容

  • 没有找到相关文章

最新更新