Python从入门到网络爬虫(模块详解)

模块

我们知道,函数和类都是可以重复调用的代码块。在程序中使用位于不同文件的代码块的方法是:导入 (import) 该对象所在的模块 (mudule)。当程序变得越来越大时,将程序的不同部分根据不同分类方法保存在不同文件中通常会更加方便。

导入模块

Python 模块允许我们方便地使用多个文件中的代码来构建程序。模块就是一个包含 Python 定义和语句的 .py 文件。

例如我们创建一个 hello_world.py 文件,就可以理解为创建了一个名为 hello_world 的模块:

python 复制代码
# hello_world.py
def print_hello():
    print('Hello World!')

class Triangle:
    def __init__(self, edge_1, edge_2, edge_3):
        self.edge_1 = edge_1
        self.edge_2 = edge_2
        self.edge_3 = edge_3
    
    def __str__(self):
        return str((self.edge_1, self.edge_2, self.edge_3))
    
    def print_info(self):
        print('The three sides of a triangle are {}, {} and {}'.format(self.edge_1, self.edge_2, self.edge_3))
    
    def perimeter(self):
        return self.edge_1 + self.edge_2 + self.edge_3

可将模块视为扩展,要导入模块,需要使用关键字 import,导入模块的一般格式如下:

python 复制代码
import module_1[, module_2....]  # 可以同时导入多个模块

import module_1[, module_2....] # 可以同时导入多个模块

例如在 test.py 文件要导入 hello_world 模块:

import hello_world

导入的模块只要说明模块名即可,不需要也不能带有文件扩展名 .py。如果要使用模块中的对象,如函数、类等,需要用使用句点运算符 (.),即使用"模块名.对象"进行访问。例如,使用 hello_worl.Triangle 访问模块 hello_world 中的类 Triangle

# test_1.py import hello_world hello_world.print_hello() tri_a = hello_world.Triangle(3, 4, 5) print(tri_a)

程序输出如下所示:

Hello World! (3, 4, 5)

需要注意的是,导入的模块要位于相同的目录层次下,否则需要添加目录结构,例如,如果 hello_world 位于子目录 module 下,则需要使用如下方式:

# test_2.py import module.hello_world module.test.print_hello()

程序输出如下所示:

Hello World!

导入Python标准模块

Python 提供了许多标准模块,这些模块文件位于 Python 安装目录的 lib 文件夹中。可以像导入自己编写的模块一样导入标准模块,例如导入 math 模块,使用其中的对象:

# test_3.py import math print('sqrt(4) = ', math.sqrt(4)) print('sin(π/6) = ', math.sin(math.pi /6))

程序输出如下所示:

sqrt(4) = 2.0 sin(π/6) = 0.49999999999999994

这里可能大家会有一个疑问,这里导入的模块和当前文件并不在同一目录下,为什么不需要使用模块路径?这个问题也可以转换为------当我们使用 import 语句的时候,Python 解释器是怎样找到对应的文件的呢?

这就涉及到 Python 的搜索路径,搜索路径是由一系列目录名组成的,Python 解释器就依次从这些目录中去寻找所引入的模块。搜索路径被存储在 sys 模块中的 path 变量中:

>>> import sys >>> sys.path ['', 'D:\\Program Files\\Python39\\python39.zip', 'D:\\Program Files\\Python39\\DLLs', 'D:\\Program Files\\Python39\\lib', 'D:\\Program Files\\Python39', 'D:\\Program Files\\Python39\\lib\\site-packages'

单独导入模块中所需对象

我们可能不想每次调用模块中的对象时都指定模块名,这时,我们可以使用 from module import object,从模块中单独导入所需对象,同时使用这个单独导入的对象时就不需要在前面添加"模块名."前缀了:

# test_4.py from math import pi, sin print('sqrt(4) = ', sqrt(4)) print('sin(π/6) = ', sin(math.pi /6))

导入模块中的所有对象

可以通过 from module import * 导入模块中的所有对象,同样不再需要模块名前缀:

# test_5.py from math import * print('sqrt(4) = ', sqrt(4)) print('sin(π/6) = ', sin(math.pi /6))

不同程序代码中不可避免地可能会使用了同一个名字来命名不同对象,这时就会引起冲突,但如果这些名字属于不同的模块,就可以通过模块名来区分它们,因此为了避免名字冲突,应尽量避免使用 from module import objectfrom module import * 导入对象。

重命名导入模块或对象

另一种避免名字冲突的方法是重命名导入模块或对象:

# test_6.py import math as m from datetime import date as d print(d.today()) print('sqrt(4) = ', m.sqrt(4)) print('sin(π/6) = ', m.sin(math.pi /6))

程序输出如下所示:

datetime.date(2021, 12, 3) sqrt(4) = 2.0 sin(π/6) = 0.49999999999999994

可以看到附加的好处是可以使用简写,减少编码工作量。

导入第三方模块

除了标准库外,Python 也具有规模庞大的第三方库,覆盖了信息技术几乎所有领域,这也是 Python 的其中一个巨大优势。下面以常用可视化库 matplotlib 为例介绍第三方库的使用。和标准库不同,使用第三方库首先要进行安装,在 shell 命令中使用 pip 命令可以快速安装所需库:

python 复制代码
pip install matplotlib

安装完成后,使用第三方库就和标准库没有任何差别了:

python 复制代码
# cos_1.py
import math
from matplotlib import pyplot as plt
scale = range(100)
x = [(2 * math.pi * i) / len(scale) for i in scale]
y = [math.cos(i) for i in x]
plt.plot(x, y)
plt.show()
相关推荐
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风3 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生4 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨4 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
_.Switch4 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
老猿讲编程4 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk5 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*5 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue5 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang