如何在 Python 中使用库以用更少的代码做更多的事情
与其他编程语言一样,Python 也有库可以简化编码任务。以下是您如何利用它们以及如何创建自己的库的方法。
什么是Python库?
库是共享代码的集合。在Python中,它们非常常见,也被称为“模块”,但在其他编程语言中也无处不在。库定义了任何程序员可以在自己程序中使用的函数,类似于公共图书馆为任何人提供其材料的访问。
使用库的优点在于,您可以节省时间和精力,无需自己编写解决方案。库通常经过比您自己想出的任何东西更好的测试和调试。它们还将让您做到更多,而不是仅仅依靠自己。
在Python中,有许多库用于图形、游戏开发等任务。我最喜欢的库通常是用于数据分析的。由于可用于这些任务的大量库,Python在统计和数据科学方面尤其受欢迎。
如何安装Python库
在您的系统上安装Python库有几种方法。如果您使用的是Linux发行版,您的发行版的软件包管理器中通常会包含Python库。例如,在Debian和Ubuntu系统上,库通常以"python-"或"python3-"开头。这将全局安装库,因此您需要具有管理员权限。
如果您在系统上没有根或管理访问权限,仍然有方法可以在本地安装 Python 库。
您可以使用 pip 工具来安装列在 Python 包索引(PyPi)中的 Python 库。
例如,要安装NumPy:
pip install numpy
您可以使用 virtualenv 工具在虚拟环境中按项目安装库。
您可以使用 Mamba 进一步拓展 virtualenv 的概念,而 Mamba 正好是我选择的方法。Mamba 是一种在数据科学家和分析师中很受欢迎的工具,它允许您创建项目特定的环境。
我已经有一个用于统计计算的Mamba环境,其中包含一些流行的数据分析库。我可以在命令行中激活它:
mamba activate stats
许多 Python 库会随语言一起提供。这是 Python 文化的一项自豪之处。Python 标准库有很多模块,可以处理从与操作系统交互到处理时间和日期的各种任务。这就是为什么 Python 程序员喜欢说这门语言“自带电池”。
导入整个 Python 库
要在脚本中或在交互式 Python 模式中导入整个 Python 库,请使用 import 命令。
例如,要导入NumPy模块,请使用以下命令:
import numpy
导入库后,您可以访问该模块中的函数。这就像您定义了一堆函数。这些函数在它们自己的命名空间下被导入。这意味着默认情况下,库中的任何函数与 Python 中的内置命令是分开的。我将向您展示一些更改此默认行为的方法,但在大多数情况下,默认行为更好。
要使用这些功能,您可以调用您刚刚导入的模块。如果您理解面向对象编程的工作原理,它实际上就是一个对象。这些函数是与我们通过导入库刚刚创建的对象私有的方法。
例如,要使用 NumPy 计算数组的算术平均数或平均值,我们可以输入如下内容:
numpy.mean(numbers)
这调用了NumPy中的平均值函数。
你可能认为每次想访问函数时输入 "numpy" 是太麻烦了,你是对的。你可以用其他名称导入库作为快捷方式。你会看到的一个常见例子是将 NumPy 的名称缩短为 "np" 在导入语句中:
import numpy as np
现在你可以把numpy称为 "np." 让我们重写之前的平均值计算:
np.mean(numbers)
导入库的一部分(仅限交互式 Python!)
很多时候,当你在一个交互式 Python 环境中工作,比如标准的交互式 Python 解释器或 IPython 时,你通常只会想从一个大型库中导入一两个函数,特别是当你想在会话中反复使用它们时。这在 Python 中也很简单。
要将NumPy中的单个函数导入主命名空间,可以使用以下构造:
from library import function
例如,从 NumPy 导入 mean 函数:
from numpy import mean
您还可以通过用逗号分隔来导入多个函数。例如,要从NumPy导入均值和中位数函数:
from numpy import mean, median
导入这些函数后,你就不需要在它们前面加上 "numpy" 或 "np." 了。你可以直接使用它们,就好像它们是默认的 Python 函数一样。
例如,计算一组数字的平均值
mean(numbers)
中位数是:
median(numbers)
单独导入函数更适合交互式 Python 会话,因为这可以减少输入。在脚本中也可以这样做,但不推荐这样做。你可能会覆盖默认 Python 函数使用的名称空间,这可能会导致脚本出现错误。如果你在论坛或IRC聊天中寻求帮助,其他Python开发者可能会感到困惑。因此,你应该尽量避免在脚本中使用这种导入方式。
创建和导入您自己的 Python 库
导入您自己的 Python 库也是很简单的。您可以在不需要成为 Python 专家的情况下做到这一点。您只需一个文本编辑器和使用终端的能力即可。
Python模块最终只是定义在Python中的函数集合。你可以创建一个以.py结尾的文件,就像你编写脚本一样。如果你创建了自己的Python函数,可以将它们放在一个文件中并导入,就像其他内置或安装的Python模块一样。
要导入一个模块,请确保它具有执行权限。您可以在类 Unix 系统中使用 chmod 命令,包括 Linux 和 macOS 终端:
chmod +x my_library.py
您可以使用之前描述的方法导入库。如果您与模块在同一目录下,可以直接使用导入语句。例如,要导入库:
import my_library
如果库在另一个目录中,有几种方法可以更改搜索路径。第一种方法是使用 PYTHONPATH 环境变量。它是一个目录列表,Python 将使用这些目录来查找模块。您可以在系统 shell 中修改这个变量,既可以在命令行中,也可以在启动文件中,例如 Bash 中的 .bashrc 文件。它是一个以冒号(:)字符分隔的目录列表,类似于 Linux 系统上的 PATH 环境变量。
在Linux终端中,你可以使用echo命令查看它:
echo $PYTHONPATH
要更改它,最好是追加它。
export PYTHONPATH="$PYTHONPATH:/path/to/my/modules"
这将确保在添加您自己的目录之前,任何现有的模块搜索路径都被保留。
您还可以使用内置的 sys 模块修改搜索路径。在交互式 Python 会话中导入它:
import sys
然后检查它:
sys.path
要将目录添加到搜索路径中,请使用 append 方法:
sys.path.append('/path/to/my/modules')
由于 Python 脚本与模块或库之间没有真正的区别,您可以轻松地将其相互转换。将操作分解为更小的函数是一种良好的编程风格。您还可以从另一个脚本或交互部分调用它们,但如果您有一个脚本呢?您只需在一个 "main" 函数中定义脚本的操作。
if __name__ == "__main__":
这将检查 Python 解释器是否作为脚本而不是导入来执行脚本。然后,您可以将所有希望在脚本中执行的内容放在这一部分之后,同时将可能在另一个脚本或交互会话中导入的函数留在前面。
通过使用模块的能力,您可以利用Python大量可用模块的资源。您将能够做更多的事情,超出您曾经认为自己所能做到的。与从头编写代码相比,您将节省大量时间和精力。





