gpt4 book ai didi

python - 分层 python 导入

转载 作者:行者123 更新时间:2023-11-28 16:48:14 24 4
gpt4 key购买 nike

所以我有两个模块 A 和 B,还有另一个安装的模块 C。假设我在 A 和 B 中使用了 C 的一些方法。我还需要 B 中的模块 A。所以逻辑上我的导入是:

一个:

import C

乙:

import A

逻辑会告诉我 B 将包含来自 A 和 C 的函数。但是默认情况下这不是这样工作的。从某种意义上说,要在模块 A 中引用 C 中的任何函数,我们需要额外级别的命名空间引用

A.C.some_c_module()

我发现我们可以在 A 和 B 中导入 C,而无需使用讨厌的“类似 C 语言”的 ifdef 克隆,它会工作得很好。我的问题是,两次导入此类模块是否会受到惩罚?从某种意义上说,python 足够聪明,知道 A.C.some_module == C.some_module?还是我这样做只是一个坏 child ?

最佳答案

两次导入模块不会导致它被加载两次。 Python 加载模块一次并保留对它的引用。所以是的,Python 足够聪明,知道这两个版本是相同的。您可以随心所欲地导入模块,它只会“花费”您一次。

顺便说一句,“B 将包含来自 A 和 C 的函数”是错误的,原因是当您在 A.py 中执行 import C 时,A 不会“包含来自 C"的函数。相反,A 包含对 C 本身的引用。因此,当您从 B 内部导入 A 时,您会获得对 C 的引用,而不是对 C 内部函数的引用。如果您使用 from C import blahBlah 将 C 的各个部分直接导入 A 的命名空间,则当您导入 A 时,您将可以作为 A 的成员访问这些函数。

# A.py
from C import blah

# B.py
import A
A.blah # this will work

关于python - 分层 python 导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11494552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com