导入函数和包#
很多时候,我们需要默认Python库没有直接提供的工具。在这种情况下,我们需要从模块或包中导入必要的函数到我们的笔记本或脚本中。一些模块直接随Python发行版提供(比如在Python中的基础数学中看到的math模块),而一些其他的如Numpy、scikit-image等是通过pip或conda安装的外部包。在导入方面,它们的工作方式相同,我们有多种方法来导入单个函数或一组函数。
基本导入#
基本的导入语句使用关键词import和模块名。例如,使用处理文件路径和名称的基本Python模块pathlib:
import pathlib
如果我们想导入一个外部包,我们需要确保它实际上已安装,否则我们会得到一个错误消息:
import absent_package
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
Input In [14], in <cell line: 1>()
----> 1 import absent_package
ModuleNotFoundError: No module named 'absent_package'
如果你缺少一个包,你可以直接从笔记本使用pip或conda安装它。例如,如果Numpy还没有安装,你可以执行:
conda install -c conda-forge numpy
Collecting package metadata (current_repodata.json): done
Solving environment: done
# All requested packages already installed.
Note: you may need to restart the kernel to use updated packages.
替代导入形式#
使用上面的简单形式,我们可以直接访问附加到主包的函数。让我们导入我们稍后将用于处理图像的Numpy包。我们可以导入它:
import numpy
现在我们可以通过简单使用点表示法来访问Numpy的余弦函数:
numpy.cos(3.14)
-0.9999987317275395
要找到包或模块中所有可用的函数,你通常需要查看其文档并寻找应用程序编程接口或API。例如,这里我们可以找到Numpy所有数学函数(包括余弦)的描述:https://numpy.org/doc/stable/reference/routines.math.html
名称缩短#
如果我们经常使用一个包,我们可能不想每次需要使用它的函数时都写全包名。为了避免这种情况,我们可以在导入时使用as语句来缩写它:
import numpy as np
np.cos(3.14)
-0.9999987317275395
特定函数#
如果我们只需要包中的一个特定函数,我们也可以使用from语句只导入它。例如,如果我们只想导入上面的np.cos函数:
from numpy import cos
cos(3.14)
-0.9999987317275395
当然,在这种情况下,除非我们找到导入函数的具体行,否则我们不知道cos一定属于Numpy,因为我们也可能在笔记本中定义了这样一个函数。
子模块#
在像Numpy这样的大型包中,一些函数可以直接从主包访问(如np.cos),而其他更专门的任务则按主题或领域分组到子模块中。例如,Numpy有一个专门用于分布的子模块,叫做random。上面看到的所有要点在这里仍然适用。
我们使用点表示法来访问函数,但现在需要指定子模块名。例如,normal函数生成从正态分布中抽取的数字:
np.random.normal()
1.8077301364791438
我们可以通过只导入子模块来缩短函数调用:
from numpy import random
random.normal()
0.0909924357071552
我们可以进一步缩短,只导入函数:
from numpy.random import normal
normal()
0.0038794083334154307
练习#
Numpy包有一个名为linalg的线性代数子模块。以下代码计算向量的范数:np.linalg.norm([1,2])。尝试:
只导入子模块并调用相同的函数
只导入
norm函数并调用它