为什么我可以在Python 3.7中做到这一点:
from PIL import Image
im = Image.open("hardcastle-crags-3462894.jpg")
但不是这个,我理解是一回事:
import PIL
im = PIL.Image.open("hardcastle-crags-3462894.jpg")
后者给出的结果是:
AttributeError: module 'PIL' has no attribute 'Image'
我明白这些是一回事。为什么一个有效而另一个无效?
回答我自己的问题(现在我理解正确(。
在 Python 中,您可以导入:
- 模块 - 单个文件,例如 something.py;或
- 包 - 包含一个或多个.py文件的目录,并且始终包含一个名为__init__.py的文件,该文件将目录指定为包
在这种情况下,语句:
import PIL
实际上与说">导入PIL目录中的__init__.py文件"相同。在这种特定情况下,该__init__.py文件不会导入或以其他方式提供任何名为"Image"的类或其他模块,因此我随后在初始导入后的示例 2 中对它的引用失败。
相比之下,声明:
from PIL import Image
解释略有不同。这实际上与说">在包目录 PIL 中查找名为 Image 的模块并导入它"相同。
因此,您可以看到导入语句实际上有点依赖于上下文。在不同的情况下,它可能意味着不同的事情。
这是一个很好的资源,它解释了 import 语句根据上下文运行的不同方式。