8.1 标准库

Python 提供了大量的标准库以便用户开发项目,本节主要介绍标准库及其使用方法。在使用标准库时,需要将标准库导入代码文件。

8.1.1 标准库的介绍

标准库是 Python 自带的库,无须下载,可直接使用。标准库的目录地址可以通过以下代码获取:

python

import sys
print(sys.exec_prefix)

该代码中的sys.exec_prefix可用于获取当前 Python 的安装目录地址。

plaintext

C:\Users\Administrator\AppData\Local\Programs\Python\Python37

注意不同操作系统的 Python 的安装目录地址是不同的,这里展示的是笔者计算机上的 Python 的安装目录地址。

以上路径为 Python 的安装目录地址,而标准库在该目录地址下的 Lib 文件夹中。Python 自带的标准库涉及的领域非常多,包含时间模块、随机库模块、正则表达式模块、图形界面模块、网络通信模块、网络爬虫模块、绘图模块、邮件收发模块、网页设计模块等。

8.1.2 标准库的导入方法

在代码中如果需要使用 Python 自带的标准库,可以使用保留字fromimport导入相应的标准库。Python 自带的标准库是 Python 官方团队提前写好的代码文件或文件夹,所以导入库的原理与文件中导入类的原理相同。以下以标准库time为例,其导入方法如下:

python

import time                 #导入整个time库
from time import sleep      #导入time库中的sleep()函数
from time import *          #导入time库中的全部函数
import time as t            #导入整个time库,并且定义别名为t

8.2 时间库

Python 标准库中的time库主要用于获取当前时间和设置时间的格式。在使用time库之前需要使用importtime库导入代码文件。

8.2.1 获取时间戳

时间戳表示当前时间与 1970 年 1 月 1 日 0 时 0 分 0 秒的时间差(以秒为单位)。

示例代码:

python

01 import time
02 a = time.time()
03 print(a)

第 1 行代码使用import导入time库,第 2 行代码使用time库中的time()函数获取时间戳。

代码执行结果:

plaintext

17622874693.6661327

注意读者执行代码后的输出结果会与该结果有差异,原因在于time.time()获取的是当前时间与 1970 年 1 月 1 日 0 时 0 分 0 秒的时间差,读者执行代码的时间与笔者编写本书的时间是不一致的。

一个程序是否优良可以通过其运行的稳定性和运行速度来判定,time()方法不仅可以检测程序代码在何时被执行,还可以测量程序的运行速度。

示例代码(测量循环运行时间):

python

运行

01 import time
02 start = time.time()
03 i = 1
04 while i<100000000:
05     i += 1
06 end = time.time()
07 print('代码启动时间:',start,'\n停止时间:',end,'\n执行时间:',end-start)
  • 第 2 行代码中的time.time()函数用于获取当前的时间戳,即从 1970 年 1 月 1 日 0 时 0 分 0 秒到当前的时间差。
  • 第 3~5 行代码表示执行while循环 100000000 次,主要用于模拟代码运行消耗的时间。
  • 第 6 行代码再次使用time.time()函数获取当前时间戳,startend获取的时间戳是不同的。

plaintext

代码启动时间: 1777293846.1712599 
停止时间: 1777293848.914736 
执行时间: 2.743476152420044


如果在while循环中加入print()输出语句,执行时间则会大大增加,因为print()语句在输出信息时需要 CPU 进行 I/O 操作,需要耗费的时间就会增多。

示例代码(带 print 语句的循环):

python

01 import time
02 start = time.time()
03 i = 1
04 while i<100000000:
05     print(i)
06 end = time.time()
07 print('代码启动时间:',start,'\n停止时间:',end,'\n执行时间:',end-start)

执行代码后耗费时间为 1068.2438850402832 秒。

优化版本(写入文件代替 print):

python

01 import time
02 with open('o.txt','w') as f:
03     start = time.time()
04     i = 1
05     while i<100000000:
06         i += 1
07         f.write(str(i))
08     end = time.time()
09 print('代码启动时间:',start,'\n停止时间:',end,'\n执行时间:',end-start)

执行代码后所耗费的时间为 68.09210014343262 秒,相比使用print()语句消耗的时间减少约 93.6%。

8.2.2 时间休眠

当要让代码程序在执行前等待一段时间,可以使用sleep(参数)来实现,其中参数为程序休眠的时长,可以是小数或整数,单位为秒。

示例代码:

python

01 import time
02 time.sleep(10)
03 print('此消息10秒后输出')

第 2 行代码设置程序休眠 10 秒钟,即在 10 秒后才开始执行第 3 行代码。

补充time库中还有很多其他的方法,读者可以使用dir(time)来获取time库中的所有方法,还可以使用help(time.方法)的形式获取相应方法的说明。


8.3 随机库(重要)

随机库可用于产生随机数据,例如抽奖游戏中,从用户选择 “开始抽奖” 起,系统会随机抽取 “奖盘” 中的一个奖项。要想实现使用代码生成随机数据,可以使用标准库random,在使用前需要通过import random导入random库。

8.3.1 随机生成数值

random库中可以随机生成数值的方法有uniform()random()randint()randrange()等。

uniform() 方法

uniform(参数1, 参数2)方法用于生成参数 1 到参数 2 之间的随机小数。示例代码:

python

01 import random
02 a = random.uniform(1,5)
03 print(a)

执行代码后的输出结果为3.798178712316873,每次运行结果都可能不同。

random() 方法

random()方法用于生成 0~1(不包含 1)的随机小数,无须填入参数。示例代码:

python

01 import random
02 a = random.random()
03 print(a)

执行代码后的输出结果为0.020160160311477493,每次运行结果都可能不同。

randint() 方法

randint(参数1, 参数2)方法用于生成参数 1 到参数 2 之间的整数。示例代码:

python

01 import random
02 a = random.randint(2,9)
03 print(a)

执行代码后将输出一个 2~9 的整数,结果为7

randrange() 方法

randrange(参数1, 参数2, 参数3)方法用于生成在参数 1 到参数 2 之间且步长为参数 3 的随机整数。示例代码:

python

01 import random
02 a = random.randrange(0,20,5)
03 print(a)

执行代码后的输出结果为10

8.3.2 随机选择

random库中的choice()shuffle()sample()函数可以实现从一些数据中随机选择一个或多个元素。

choice() 函数

choice(参数)用于从参数中随机选择一个元素,参数通常是序列类型数据(列表、字符串)。示例代码:

python

01 import random
02 ls = ['一等奖','二等奖','三等奖','谢谢惠顾']
03 a = random.choice(ls)
04 print(a)

第 3 行代码从列表ls中随机选取一个元素,笔者执行代码后的输出结果为谢谢惠顾,每次运行的结果都可能不同。

shuffle() 函数

shuffle(参数)用于将参数中的元素随机打乱,参数是序列类型数据。示例代码:

python

01 import random
02 ls = ['一等奖','二等奖','三等奖','谢谢惠顾']
03 random.shuffle(ls)
04 print(ls)

plaintext

['一等奖', '三等奖', '谢谢惠顾', '二等奖']
sample() 函数

sample(参数1, 参数2)用于从参数 1 中随机选取参数 2 个元素,其中参数 1 为序列类型数据,参数 2 为整数。示例代码:

python

01 import random
02 ls = ['一等奖','二等奖','三等奖','谢谢惠顾']
03 a = random.sample(ls,2)
04 print(a)

plaintext

['一等奖', '谢谢惠顾']

8.3.3 随机种子

在某些场景下并不希望用户每次运行代码后的结果都不相同,例如抽奖场景,这时需要用到随机种子seed()函数。

python

random.seed(种子)

功能:在随机数中设置一个随机种子,下一次随机获取的值必须由该随机种子发出。参数种子:可以是任何数据类型的,例如整数类型或字符串类型。

示例代码:

python

01 import random
02 ls = ['一等奖','二等奖','三等奖','谢谢惠顾']
03 random.seed('张三')
04 print(random.choice(ls))
05 random.seed('王五')
06 print(random.choice(ls))

plaintext

二等奖
谢谢惠顾

注意由于设置了随机种子,因此每次执行代码后的输出结果都是相同的,且不受运行的限制。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐