对于用作单例的模块,导入如何工作?

2024-09-28 03:16:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我很困惑如果你把一个模块作为一个单体来处理会发生什么

假设我有一个模块conf.py,其中包含一些需要由多个其他文件访问的配置参数。在conf.py中,我可能有以下代码(没有其他代码):

myOption = 'foo' + 'bar'

如果我现在先在a.py中导入它,然后在b.py中导入它,我的理解是第一次导入它时(在a.py中),将执行字符串连接。但是第二次导入时(在b.py中),conf.myOption已经有了它的值,因此不会执行字符串连接。这是正确的吗

如果在完成这两个导入之后,我将在b.py中执行以下操作

conf.myOption = 'aDifferentFoobar'

显然,b.py现在会看到这个新值。py会看到相同的值,还是仍然会看到“foobar”

我相信(如果我错了,请纠正我)进口总是通过参考而不是价值来参考的?我猜这就是上述问题的归结


Tags: 模块文件字符串代码py参数fooconf
1条回答
网友
1楼 · 发布于 2024-09-28 03:16:11

试试看:

mod.py

def foo():
    print("in foo()")
    return "foo"

bar = foo()
opt = "initial"

b.py

import mod

mod.opt = "changed"

a.py

import mod
import b

print(mod.bar)
print(mod.opt)

执行a.py

$ python3.4 a.py

输出:

in foo()
foo
changed

我们了解到:

  • foo()只执行一次
  • mod.optb.py更改
  • a.py查看mod.opt的更改值
  • 奖金:在a.pyimport的顺序并不重要

相关问题 更多 >

    热门问题