type
status
date
slug
summary
tags
category
icon
password
在 Python 中,
import
语句用于引入模块或从一个模块中导入特定的变量、函数、类等。from ... import ...
是 import
语句的一个常见用法,用来从一个模块中导入特定的部分,而不是整个模块。1. 基本用法
导入整个模块
如果你想要导入整个模块(文件),可以使用
import 模块名
:这会导入
math
模块中的所有功能(但不会直接导入到全局命名空间)。你可以通过 模块名.函数名
的方式来访问模块中的函数或变量。例如:从模块中导入特定的函数或变量
如果你只需要从模块中使用某个特定的函数或变量,可以使用
from ... import ...
语句。这样可以直接使用导入的函数或变量,而不需要通过模块名来访问。在这个例子中,我们只导入了
math
模块中的 sqrt
函数,因此不需要使用 math.sqrt
,可以直接调用 sqrt
。2. 常见用法示例
导入多个函数或变量
你可以一次导入多个函数或变量,用逗号分隔它们:
导入整个模块中的所有内容
你可以使用
*
来从模块中导入所有内容。这会将模块中的所有函数、类和变量导入到你的全局命名空间。但请注意,这样做可能会污染命名空间,容易引起命名冲突。警告:
from math import *
不是推荐的做法,因为这会将模块中的所有内容导入到当前的命名空间中,可能会覆盖你已有的变量或函数。为导入的模块或函数起别名
你可以使用
as
给导入的模块或函数起一个别名,以便在代码中使用更短的名称。- 为模块起别名:
这里我们为
numpy
模块起了一个别名 np
,这在处理较长的模块名时非常方便。- 为函数或变量起别名:
这里我们将
sqrt
函数重命名为 square_root
,可以在代码中使用新的名称。3. 模块的查找路径(Python Path)
当你使用
import
或 from ... import ...
引入一个模块时,Python 会在其模块搜索路径中查找该模块。这些路径存储在 sys.path
中,你可以通过以下命令查看当前的模块搜索路径:sys.path
包含了 Python 会查找模块的目录列表。如果你导入的模块不在这些目录中,Python 会抛出 ModuleNotFoundError
。你可以通过以下方式将自定义路径添加到
sys.path
中:4.导入包中的模块
Python 支持将模块组织成包(package),包实际上是包含多个模块的目录。通过
from ... import ...
,你可以导入包中的特定模块或包中的函数。假设有一个包结构如下:
你可以通过以下方式导入包中的模块或函数:
- 导入整个模块:
- 只导入模块中的特定函数:
5. __init__.py
文件的重要性
在包中,
__init__.py
文件是必须的(在 Python 3.3 之前),它告诉 Python 该目录是一个包。即使文件为空,它也必须存在。在 Python 3.3 及以上版本,__init__.py
文件是可选的,但它仍然是一个很好的习惯,尤其是在需要初始化包或导入子模块时。6. 导入时的命名冲突
如果你导入的模块或函数与现有的变量名称冲突,可能会导致意外的覆盖。例如:
为避免这种情况,通常建议使用模块的前缀或为函数/变量起别名。
7. 相对导入与绝对导入
在包中,你可以使用相对导入或绝对导入。
- 绝对导入:从包的根目录开始,明确指定模块的路径。
- 相对导入:使用
.
来表示当前目录,..
表示上一级目录。这种方式适用于包内模块之间的导入。
相对导入只能在模块作为包的一部分时使用,不能在顶层脚本中使用。
8. 动态导入
在某些情况下,你可能需要在运行时导入模块,可以使用
importlib
模块进行动态导入:importlib.import_module()
函数允许你在运行时导入模块,这在某些情况下非常有用,比如动态加载插件。总结
import
用于导入整个模块。
from ... import ...
用于从模块中导入特定的函数、类或变量。
- 可以使用
as
给导入的模块或函数起别名。
from ... import *
会导入模块中的所有内容,但可能导致命名冲突,不建议使用。
- 了解
sys.path
可以帮助你找到模块的加载路径。
- 绝对导入和相对导入分别适用于不同的包结构。
- 作者:CrystalPuNK
- 链接:https://crystalpunk.top/article/Tech/python/001
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。