所以我有两个模块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,而不必使用像ifdef克隆这样讨厌的“C语言”,这样就可以很好地工作了。我的问题是,两次导入这样的模块会带来惩罚吗?从某种意义上说,python足够聪明,能够知道A.C.some_module==C.some_module?或者我这么做只是个坏孩子?

最佳答案

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

07-24 09:52
查看更多