当python导入时,它是否在';导入&x27;陈述

当python导入时,它是否在';导入&x27;陈述,python,python-2.7,Python,Python 2.7,我对python的导入机制没有非常清楚的理解。让我困惑的一件事是:当python导入一个模块时,它是否也会导入其中导入的名称。代码如下: # A.py def A_func(): pass; # B.py from A import *; def B_func(): pass; # C.py from B import *; def C_func(): # I can use B_func, OK, no problem. # I can use A_func her

我对python的导入机制没有非常清楚的理解。让我困惑的一件事是:当python导入一个模块时,它是否也会导入其中导入的名称。代码如下:

# A.py
def A_func():
   pass;

# B.py
from A import *;
def B_func():
   pass;

# C.py
from B import *;
def C_func():
   # I can use B_func, OK, no problem.
   # I can use A_func here, is import recursive?
如果python递归导入,我的代码是不是一个糟糕的实践?如果我加上

from A import *;
到C.py?导入两次是否会导致开销?或者我应该避免“from xx import*”而只导入所需的名称吗


谢谢

代码仅在第一次为模块调用import时执行。后续导入仅复制名称和引用


话虽如此,不要导入
*

您只能在C.py中使用B_func。您将无法访问函数。如果要在中使用定义,则必须从导入。
编辑:对不起,我的错。我的理解是错误的

我也有同样的想法,但是。。。我可以在C中使用A函数,因为A函数是由B在*中导入的。这与我对进口的理解不符,因此我提出了这个问题。@manish,那不是真的。如果
B.py
将内容从
A.py
导入到其命名空间中,则它位于命名空间中,可以从其他地方导入。虽然在大多数情况下这不是很好的风格。如果
C.py
需要从
A.py
导入一些东西,它应该直接从那里导入。这意味着如果在模块A中导入名称X,如果我在A中导入所有内容,我就可以访问该名称X,对吗?这取决于
A中的内容。uuuuuuuuuu所有
导入*
总是一种不好的做法