Python的模块与包

发布时间:2023年12月18日

前言? ? ? ??

????????当你编写Python程序时,你经常会引入别人编写好的模块。有的模块是Python自带的,你无需安装就能直接引用,而有的模块则是由Python生态系统里的第三方工程师提供的,你需要通过pip安装之后,才能进行使用。由于在编写Python程序的时候会经常引用别人编写好的模块,因此你应该花一些时间来了解与之有关的知识点。为了让你对Python中的模块有一个清晰的认识,这篇文章将从以下几步来展开:

  1. 如何引入模块
  2. 理解模块(Module)
  3. 包(Package)

【一】如何引入模块

????????首先,我们来看一看,如何引入Python内置的模块。新建文件start.py,内容如下所示:

import os

????????以上指令引入了Python内置模块os,引入它之后,我们便可以使用这个模块内部的函数,比如你可以调用它提供的函数cpu_count来获取CPU的核数:

import os

print(os.cpu_count())

????????在命令行中执行以下命令,得到的结果如下所示:

% python3 start.py
4

????????接下来,我们看看如何引入第三方提供的模块,这里,我们使用requests作为例子,关于它的使用说明,你可以到它的官网查阅。由于你使用的不是Python内置的模块,因此,你首先需要执行以下命令来安装requests

pip install requests

安装之后,在start.py中添加以下指令,:

import requests

????????该指令的作用是导入requests模块,接下来,你便可以使用该模块所提供的功能。比如,我们可以使用其中的get函数来获取digolds.cn的网页内容,具体的指令如下所示:

r = requests.get('https://digolds.cn')
print(r.text)

????????除此之外,你还可以通过from module import submodule来引入模块中的某个函数,比如下面的代码和上面的代码是等价的:

from requests import get
r = get('https://digolds.cn')
print(r.text)

或者,你也可以通过import module.submodule.submodule来引入模块中的某个函数,如下所示:

import requests.get
r = requests.get('https://digolds.cn')
print(r.text)

这里的submodule有可能是另外一个模块,也可能是当前模块中的某一个常量、函数或者类等。

创建包和模块是在 Python 中组织和管理代码的重要方式。下面我将介绍如何创建包和模块:

【二】模块(modules)


【1】概念:

????????将实现某一特定功能的代码放置在一个文件中,以便于其他程序进行导入使用,可以避免函数名、变量名的冲突,该文件称为模块,拓展名为.py

【2】作用:

模块 = 函数 + 类 + 变量
程序规模不断变大需要分为多个文件,以提高维护性
模块可以重复导入,提高重用性

【3】分类:

Python 中的模块可以分为三类:

  1. 内置模块(Built-in Modules): 这些模块是 Python 标准库中自带的模块,可以直接使用,无需安装额外的包。标准库包含了各种功能模块,如数学计算、文件操作、日期时间处理、网络通信等。例如,math 模块提供了数学运算函数,datetime 模块用于处理日期和时间。

  2. 第三方模块(Third-party Modules): 这些模块是由其他开发者或组织开发并共享的,可以通过 pip 或其他包管理工具安装。第三方模块提供了许多额外的功能和工具,可以帮助你解决各种问题。常用的第三方模块包括 numpy(数值计算)、requests(HTTP 请求)、beautifulsoup4(HTML 解析)等。

  3. 自定义模块(Custom Modules): 这些模块是由你自己创建的,用于组织和重用自己的代码。你可以将相关的函数、类和变量封装在一个文件中,并按需导入和使用。自定义模块可以按照你的项目需求来设计,提高代码的可读性和可维护性。

无论是内置模块、第三方模块还是自定义模块,它们都可以通过 import 语句导入到 Python 程序中,并使用其中定义的函数和类。

( 1 )导入内置模块

import math

result = math.sqrt(16)
print(result)  # 输出:4.0

( 2 )?第三方模块

import numpy as np

array = np.array([1, 2, 3])
print(array)  # 输出:[1 2 3]

( 3 )?自定义模块

import my_module

my_module.my_function()

?

( 4 )模块常见的导入方法:五种

????????import 模块名
????????from 模块名 import 功能名
????????from 模块名 import *
????????import 模块名 as 别名
????????from 模块名 import 功能名 as 别名


(5)使用import导入模块

????????import 模块名
????????import ?模块名1,模块名2…… ?# 导入多个模块
????????import math
????????print(math.sqrt(9))


(6)使用from......import语句导入模块

????????作用:使用import导入模块时,如果只需要部分函数,可以通过from实现、
????????PS:使用时不需要增加模块名前缀

from math import sqrt, floor
print(sqrt(9), floor(10.88)) ?# 3.0 10

????????PS:使用from……import导入的模块,必须保证导入的内容名称是唯一的。若导入模块有相同的变量、函数、类。则会覆盖之前导入的同名内容,因此需要检查,别名应简洁。

(7)使用as关键字为导入模块定义别名

原因:某些情况下,模块名称过长,建议使用as命名一个较为短的新名称,调用时使用新名称操作

from math import sqrt, floor
print(sqrt(9), floor(10.88)) ?# 3.0 10


(8)自定义模块

作用:将相关代码写在一个单独的文件中,并命名为“.py”。自行创建的模块名称不能与标准库中的模块名称相同????????
例:新建一个模块的文件,实现素数的判断

当前目录新建prime.py
输入代码后保存退出

def fun_prime(num):
? ? if num < 2:
? ? ? ? print('请输入大于2的整数')
? ? else:
? ? ? ? for i in range(2, num):
? ? ? ? ? ? if num % 2 == 0:
? ? ? ? ? ? ? ? return 0
? ? ? ? else:
? ? ? ? ? ? return 1
# 2 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99?

【三】包(package)

【1】包的概念

????????在 Python 中,包(Package)是一种用于组织模块的方式,它通常是一个包含 __init__.py 文件的目录。包可以将相关的模块组织在一起,形成一个层次化的结构,以便更好地组织和管理代码。

【2】包的创建

????????要创建一个包,你可以简单地创建一个目录,并在其中包含一个名为 __init__.py 的文件。这个 __init__.py 文件可以为空,也可以包含包的初始化代码。例如,假设你有一个名为 my_package 的包,其目录结构如下:

my_package/
├── __init__.py
├── module1.py
└── module2.py

【3】导入包

????????在其他 Python 文件中使用包时,可以使用 import 语句将包导入到当前文件中。例如,如果有一个名为 my_package 的包,可以使用 import my_package 导入该包。

【4】使用包中的模块

????????导入了包之后,你可以使用包中定义的模块、函数、类和变量。使用 . 运算符来访问包中的子模块。例如,如果 my_package 中包含了一个名为 module1.py 的模块,你可以使用 my_package.module1.function_name() 来调用其中的函数。

__init__.py 文件的作用: __init__.py 文件可以包含包的初始化代码,也可以用于指定包的公共接口。在 __init__.py 中可以定义在导入包时会自动执行的初始化逻辑,也可以通过在 __init__.py 中导入子模块,使得在导入包的时候就能够直接访问子模块。

【5】嵌套包

????????包内部可以再包含子包,从而形成多层次的包结构。在这种情况下,包的导入和使用方式也类似,只是需要使用多级的.来访问子包中的模块。

?

import my_package.module1
import my_package.module2

my_package.module1.some_function()

?或者使用别名:

import my_package.module1 as mod1

mod1.some_function()

第三方包或模块的pip下载

命令行中输入pip ?help查看
?

文章来源:https://blog.csdn.net/m0_58310590/article/details/135002207
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。