我有两个文件,它们需要互相使用不同的函数。
file1.py:
import file2 # from file2 import y2
def x1():
print "x1"
def x2():
print "x2"
file2.y2()
file2.py:
import file1 # from file1 import x1
def y1():
file1.x1()
print "y"
def y2():
print "y2"
if __name__ == "__main__":
y1()
我想知道为什么使用import file1
可以工作,但是从file1中只导入特定函数(from file1 import x1
)却不行?
Traceback (most recent call last):
File "file2.py", line 1, in <module>
from file1 import x1
File "file1.py", line 1, in <module>
import file2
File "file2.py", line 1, in <module>
from file1 import x1
ImportError: cannot import name x1
我已经阅读了关于导入的this:
import X
引入模块X
,并在当前命名空间中创建对该模块的引用。然后您需要定义已完成的模块路径才能从模块内部访问特定属性或方法(例如:X.name
或X.attribute
)。
from X import *
导入模块X
,并在当前命名空间中创建对该模块中所有公共对象的引用(即,所有名称不以_
开头的对象),或者您提到的任何名称。换句话说,在运行此语句之后,您可以使用简单(未限定)名称来引用在模块X
中定义的内容。但是,X
本身没有被定义,因此X.name
无法工作。如果name
已经定义,则会被新版本替换。如果在X
中更改了名称以指向其他对象,则您的模块将不会注意到。这使得模块中的所有名称都在本地命名空间中可用。