层次python导入

2024-10-02 00:26:29 发布

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

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

答:

import C

乙:

^{pr2}$

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

A.C.some_c_module()

我发现我们可以在A和B中导入C,而不必使用令人讨厌的“C语言”ifdef克隆,这样就可以很好地工作了。我的问题是,两次导入这样的模块会带来惩罚吗?从某种意义上说,python是否足够聪明,能够知道A.C.some_module==C.some_module?或者我这么做只是个坏孩子?在


Tags: 模块方法函数import空间情况some逻辑
1条回答
网友
1楼 · 发布于 2024-10-02 00:26:29

导入模块两次不会导致加载两次。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

相关问题 更多 >

    热门问题