我有一个名为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