import
在Python(3.5)中的工作方式使我有些困惑。我认为使用“ import x”之类的东西就像将任何内容写入“ x.py”一样,但是看起来并不像。
我具有以下结构:
现在,为了完成,模块是:
## module1.py
import numpy as np
import matplotlib.pyplot as plt
def plot(x,y):
A = plt.figure()
plt.plot(x,y)
plt.show()
return A
因此,它确实没有matplotlib.pyplot
做不到的任何事情。现在我的main.py只是这样称呼它:
## main.py
from Package1.module1 import plot
a= plot([1,2,3],[2,4,6])
这有效。因此,我假设它实际上将matplotlib.pyplot
导入为plt,因为否则功能plot
将无法正常工作。但是,如果现在我向main.py
添加任何内容,例如plt.figure()
或np.array()
,它表示无法识别这些内容。
所以实际的问题是...我是否已将matplotlib.pyplot
导入到主要名称空间?如果没有,这里是否有其他名称空间?如果有的话,如果我现在想在该代码下面的matplotlib
中使用main.py
,并用import matplotlib.pyplot as plt
再次导入,我会两次导入吗?
我在这里的层次结构中有些迷路了。
答案 0 :(得分:2)
from Package1.module1 import plot
执行此操作时,仅模块plot
中的名称Package1.module1
被拉入当前模块(main.py
)中。 Package1.module1
中可能定义的其他符号未插入。
但是。
Pacakge1.module1
中的整个模块都已运行。如果将print('something')
放在模块的全局部分中,例如:
## module1.py
import numpy as np
import matplotlib.pyplot as plt
print('something')
def plot(x,y):
A = plt.figure()
plt.plot(x,y)
plt.show()
return A
它将被打印。
something
因此,您的函数定义确实已加载到运行时中。因此,您的功能有效。但是您只能访问导入的功能,即plot
,而不能访问其他任何功能。