Python—关于通过其他两个模块导入相同模块的混淆
我在尝试使用创建Python—关于通过其他两个模块导入相同模块的混淆,python,mongodb,python-import,pymodm,Python,Mongodb,Python Import,Pymodm,我在尝试使用创建烧瓶扩展时注意到了这一点。 考虑使用 PyMODM.ManggOMDEL ./P>的用例。 Models.py(用户定义的模块) 模块的connect方法的有趣之处在于,它使用一个名为\u CONNECTIONS的模块级变量来存储所有连接。 在#第2行中导入连接到当前名称空间后,我们将使用连接方法向_CONNECTIONS添加连接 然后,在第4行中,我们调用了模块的TopLevelMongoModel类的save方法,该类间接调用的集合()。 导入的方法\u get\u db
烧瓶扩展时注意到了这一点。
考虑使用<代码> PyMODM.ManggOMDEL ./P>的用例。
Models.py(用户定义的模块)
模块的connect
方法的有趣之处在于,它使用一个名为\u CONNECTIONS
的模块级变量来存储所有连接。
在#第2行
中导入连接到当前名称空间后,我们将使用连接方法向_CONNECTIONS
添加连接
然后,在第4行中,我们调用了模块的TopLevelMongoModel类的save方法,该类间接调用的集合()。
导入的方法\u get\u db
萨默里:
Models.py
导入的连接方法以向模块级变量添加连接。
导入以某种方式管理的数据库,以从\u CONNECTIONS
获取连接,该连接由Models.py
更改
这背后的机制/概念是什么?模块级变量是像JavaScript中那样的全局变量还是我遗漏了什么
如果一个模块由两个模块导入,那么这两个模块应该有两个\u连接实例,而不是一个
事实并非如此
你的导入是这样工作的,因为导入就是这样工作的。import
语句不会在每次调用时创建新模块。如果模块以前已导入,则后续导入只需绑定到原始模块
考虑以下三个文件:
main.py
a、 派克
b、 派克
而本次python3.6课程:
$ python3.6 main.py
Inside a, x=3
Inside b, a.x=3
main, imports complete, a.x=3, b.a.x=3
modified a.x, a.x=7, b.a.x=7
注意两件重要的事情:
- 一行内的
仅打印一次。即使从main
和b
导入a
,a
内部的仅在第一次导入a
时打印。这一点很重要:a
中的代码只执行一次
- 对
a.x
的修改会影响a.x
和b.a.x
。这也很重要。只有一个a
模块,因此只有一个a
模块命名空间。导入a
的任何人都将看到具有相同名称和相同对象的相同命名空间
如果一个模块由两个模块导入,那么这两个模块应该有两个\u连接实例,而不是一个
事实并非如此
你的导入是这样工作的,因为导入就是这样工作的。import
语句不会在每次调用时创建新模块。如果模块以前已导入,则后续导入只需绑定到原始模块
考虑以下三个文件:
main.py
a、 派克
b、 派克
而本次python3.6课程:
$ python3.6 main.py
Inside a, x=3
Inside b, a.x=3
main, imports complete, a.x=3, b.a.x=3
modified a.x, a.x=7, b.a.x=7
注意两件重要的事情:
- 一行内的
仅打印一次。即使从main
和b
导入a
,a
内部的仅在第一次导入a
时打印。这一点很重要:a
中的代码只执行一次
- 对
a.x
的修改会影响a.x
和b.a.x
。这也很重要。只有一个a
模块,因此只有一个a
模块命名空间。导入a
的任何人都将看到具有相同名称和相同对象的相同命名空间
我不知道你在问什么。只有一个\u CONNECTIONS
实例被其他两个模块使用;这为什么令人惊讶呢?嗯。。如果一个模块由两个模块导入,那么这两个模块应该有两个\u连接实例
而不是一个..但是为什么呢?你怎么会这么想?如果您将一个对象分配给两个名称,那么您仍然只有一个对象,而不是两个。根本问题是:为什么/如何在应用程序级别设置扩展配置?我不确定您在问什么。只有一个\u CONNECTIONS
实例被其他两个模块使用;这为什么令人惊讶呢?嗯。。如果一个模块由两个模块导入,那么这两个模块应该有两个\u连接实例
而不是一个..但是为什么呢?你怎么会这么想?如果将一个对象分配给两个名称,则仍然只有一个对象,而不是两个。根本问题是:为什么/如何在应用程序级别设置扩展配置?
x = 3
print(f"Inside a, x={x}")
import a
print(f"Inside b, a.x={a.x}")
$ python3.6 main.py
Inside a, x=3
Inside b, a.x=3
main, imports complete, a.x=3, b.a.x=3
modified a.x, a.x=7, b.a.x=7