Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 真正进口的是什么?_Python_Import_Module - Fatal编程技术网

Python 真正进口的是什么?

Python 真正进口的是什么?,python,import,module,Python,Import,Module,在Python(3.5)中,import是如何工作的,这让我有点困惑。我认为使用“importx”之类的东西就像是在“x.py”中写任何东西一样,但它似乎不是这样 我的结构如下: main.py 包装1 模块1.py 现在,为了完成,模块是: ##module1.py 将numpy作为np导入 将matplotlib.pyplot作为plt导入 def绘图(x,y): A=plt.图() 平面图(x,y) plt.show() 归还 所以它实际上没有做任何matplotlib.pypl

在Python(3.5)中,
import
是如何工作的,这让我有点困惑。我认为使用“importx”之类的东西就像是在“x.py”中写任何东西一样,但它似乎不是这样

我的结构如下:

  • main.py
  • 包装1
    • 模块1.py
现在,为了完成,模块是:

##module1.py
将numpy作为np导入
将matplotlib.pyplot作为plt导入
def绘图(x,y):
A=plt.图()
平面图(x,y)
plt.show()
归还
所以它实际上没有做任何
matplotlib.pyplot
不会做的事情。现在我的main.py只是这样称呼它:

##main.py
从Package1.module1导入绘图
a=绘图([1,2,3],[2,4,6])
这是有效的。因此我假设它实际上将
matplotlib.pyplot
作为plt导入,因为否则函数
plot
将无法工作。但是,如果现在我向
main.py
添加任何内容,例如
plt.figure()
np.array()
,它会说它无法识别这些内容

所以实际的问题是。。。是否已将
matplotlib.pyplot
导入主命名空间?如果没有,这里是否有其他名称空间?如果有,如果我现在想在该代码下面的
main.py
中使用
matplotlib
,并且我使用
import matplotlib.pyplot as plt
再次导入它,我会导入两次吗

我对这里的等级制度有点迷茫

from Package1.module1 import plot
执行此操作时,只有模块
Package1.module1
中的名称
plot
被拉入当前模块(
main.py
)。在
包1.module1
中定义的其他符号不会被拉入

但是

packge1.module1
中的整个模块都在运行。如果在模块的全局部分放置一个
打印('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
因此,您的函数定义确实已加载到运行时中。因此,您的函数可以工作。但您只能访问导入的函数,即
绘图
,而不能访问其他任何内容

执行此操作时,只有模块
Package1.module1
中的名称
plot
被拉入当前模块(
main.py
)。在
包1.module1
中定义的其他符号不会被拉入

但是

packge1.module1
中的整个模块都在运行。如果在模块的全局部分放置一个
打印('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

因此,您的函数定义确实已加载到运行时中。因此,您的函数可以工作。但您只能访问导入的函数,即
绘图
,而不能访问其他任何内容

可能重复的可能重复的哦。我懂了。但是,如果我在
main.py
中使用
import Package1.module1
导入“all”,它仍然无法识别
plt
np
。如果我添加导入,那么导入将主要运行两次,对吗?Python将缓存导入。所以不完全是这样。那些东西只会进口一次,我明白了。最后一件事。如果我使用
import Package1.module1作为别名
,那么我可以使用
alias.plt.figure()
,它就可以工作了。但是,如果我使用
import Package1.module1
,但没有别名,它不允许我使用
Package1.module1.plt.figure()。还有其他方法调用内部导入吗?使用
\uuuu all\uuu
我明白了。非常感谢,好心的先生/女士:)哦。我懂了。但是,如果我在
main.py
中使用
import Package1.module1
导入“all”,它仍然无法识别
plt
np
。如果我添加导入,那么导入将主要运行两次,对吗?Python将缓存导入。所以不完全是这样。那些东西只会进口一次,我明白了。最后一件事。如果我使用
import Package1.module1作为别名
,那么我可以使用
alias.plt.figure()
,它就可以工作了。但是,如果我使用
import Package1.module1
,但没有别名,它不允许我使用
Package1.module1.plt.figure()。还有其他方法调用内部导入吗?使用
\uuuu all\uuu
我明白了。非常感谢,好心的先生/女士:)