Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于用作单例的模块,导入如何工作?_Python - Fatal编程技术网

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

Python 对于用作单例的模块,导入如何工作?,python,Python,我很困惑如果你把一个模块作为一个单体来处理会发生什么 假设我有一个模块conf.py,其中包含一些需要由多个其他文件访问的配置参数。在conf.py中,我可能有以下代码(没有其他代码): 如果我现在先在a.py中导入它,然后在b.py中导入它,我的理解是第一次导入它时(在a.py中),将执行字符串连接。但是第二次导入时(在b.py中),conf.myOption已经有了它的值,因此不会执行字符串连接。这是正确的吗 如果在完成这两个导入之后,我将在b.py中执行以下操作 conf.myOption

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

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

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

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

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

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

试试看:

mod.py

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

bar = foo()
opt = "initial"
import mod

mod.opt = "changed"
import mod
import b

print(mod.bar)
print(mod.opt)
$ python3.4 a.py
b.py

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

bar = foo()
opt = "initial"
import mod

mod.opt = "changed"
import mod
import b

print(mod.bar)
print(mod.opt)
$ python3.4 a.py
a.py

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

bar = foo()
opt = "initial"
import mod

mod.opt = "changed"
import mod
import b

print(mod.bar)
print(mod.opt)
$ python3.4 a.py
执行
a.py

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

bar = foo()
opt = "initial"
import mod

mod.opt = "changed"
import mod
import b

print(mod.bar)
print(mod.opt)
$ python3.4 a.py
输出:

in foo()
foo
changed
我们了解到:

  • foo()
    只执行一次
  • mod.opt
    b.py
  • a.py
    查看
    mod.opt
  • 额外好处:在
    a.py
    中导入
    s的顺序无关紧要

问得好,但你试过了吗;)说得好,虽然我有点担心可能会有不明显的角落案例。。。