第3章〓标准库简介



2min



Python的标准库是一个包含许多模块和函数的集合,这些模块和函数都是Python语言本身的一部分。Python标准库中的一些常用模块和函数有以下几个。

(1) os模块: 提供了与操作系统交互的函数,例如文件和文件夹操作。

(2) time模块: 提供了时间相关的函数,例如获取当前时间、延迟等。

(3) 数字和数学模块: 提供了与数字和数学相关的函数和数据类型。Math模块包含各种数学函数。decimal 模块支持使用任意精度算术的十进制数的精确表示。random模块用于生成随机数。

(4) pymysql: 一个用于连接和操作MySQL数据库的模块。

(5) threading和multiprocessing模块: 用于多线程和多进程编程。

(6) queue模块: 一个线程安全的队列类,用于多线程之间的通信。

(7) datetime模块: 处理日期和时间的类。

下面我们就常用的数学与日期和时间模块做一下说明,其他内容可参看官方说明文档。

3.1数字与数学模块

本章介绍的模块提供了与数字和数学相关的函数和数据类型。numbers 模块定义了数字类型的抽象层次结构。Math模块提供了对 C 标准定义的数学函数的访问。decimal 模块支持使用任意精度算术的十进制数的精确表示。

3.1.1数学Math模块的使用

Math模块包括数学函数、三角函数、角度转换函数和常量等。在使用Math模块之前,必须首先使用import语句导入Math模块,代码如下: 


import math


Math模块常用的函数如下。

(1) math.ceil(x)对 x 的值向上取整,即大于或等于 x 的最小的整数,代码如下:


import math   #导入Math模块,下同,不再重复

n1=math.ceil(5.6)  #向上取整,输出:6

n2=math.ceil(5.1)  #向上取整,输出:6


(2) math.fabs(x)返回 x 的绝对值,代码如下:


n1=math.fabs(-66)

print("n1=",n1)  #输出:n1=66.0


(3) math.floor(x)返回 x 的向下取整,小于或等于 x 的最大整数,代码如下:


n1=math.floor(-6.3)

n2=math.floor(9.6)

print("n1=",n1)#输出:n1= -7

print("n2=",n2) #输出:n2= 9


(4) math.trunc(x)返回去除小数部分的x,只留下整数部分,代码如下:


n1=math.trunc(12.45678)

print("n1=",n1)#输出:n1=12







(5) math.sqrt(x)返回 x 的平方根,代码如下:


x=math.sqrt(100)

print("100的平方根为"x)



#输出的结果如下

100的平方根为 10.0


(6) math.radians(x)将角度 x 从度数转换为弧度。

(7) math.cos(x)返回 x 弧度的余弦值,代码如下:


#计算60°的余弦值  

#注意:math.cos接收的是弧度,所以需要将60°转换为弧度  

radians = math.radians(60)

print(radians)  #输出:1.0471975511965976

cos_value = math.cos(radians)  

print(cos_value) #输出:0.5000000000000001


(8) math.sin(x)返回x弧度的正弦值,代码如下:


#计算45°的正弦值  

radians = math.radians(45)  

sin_value = math.sin(radians)  

print(sin_value) #输出:0.7071067811865476


(9) math.tan(x)返回 x 弧度的正切值,代码如下:


#计算45°的正切值  

radians = math.radians(45)  

tan_value = math.tan(radians)  

print(tan_value) #输出:0.9999999999999999


(10) math.atan(x)返回以弧度为单位的 x 的反正切值。用法与正切函数类似。

(11) math.pi是一个预定义的浮点数,表示数学常数π(圆周率),代码如下:


radius = 5 

area = math.pi * radius ** 2  

print(f"圆的面积是 {area:8.2f}")



#输出的结果如下

圆的面积是78.54




4min



3.1.2精度decimal模块

计算机在对浮点类型的数字进行数学运算时,结果会有误差,代码如下:


x=2.356

y=3.60

z=x+y

print(z)

#输出的结果如下

5.9559999999999995


Decimal数字的表示是完全精确的。在Python中,使用Decimal类可以对两个浮点数进行精确求和,以避免浮点数运算中的精度问题。Decimal类位于decimal模块中,因此在使用之前需要先导入该模块。

下面演示如何使用Decimal类对两个浮点数进行求和,代码如下:


#第3章 3.1 使用Decimal类对两个浮点数进行求和

from decimal import Decimal   



num1=Decimal('2.356')

num2=Decimal('3.60')  

result=num1+num2

print(result)



#输出的结果如下

5.956


在上面的代码中,from decimal import Decimal表示从decimal模块中导入Decimal类。首先使用Decimal类创建了两个浮点数num1和num2,然后使用加法运算符“+”对它们进行求和,并将结果存储在变量result中。最后,使用print()函数打印结果。

使用Decimal类可以确保浮点数运算的精确性,特别是在涉及金钱计算等需要高精度的场景中非常有用。



6min



3.1.3随机数random模块

在Python语言中,random模块实现了各种分布的伪随机数生成器。这个模块提供了多种生成随机数的功能。

(1) 生成一个[0,1)的随机浮点数(包含0,但不包含1),代码如下:


import random#导入random模块



random_number = random.random()  

print(random_number) #随机生成一个[0, 1)的随机浮点数



#输出的结果如下

0.24206096892194762


(2) 生成一个指定范围内的随机整数,代码如下:


import random  



random_number = random.randint(1, 10)  #生成1到10(包括10)的随机整数  

print(random_number) #输出:2


(3) 从一个序列中随机选择一个元素,代码如下:


import random  



my_list = [1, 2, 3, 4, 5]  #定义一组数列

random_choice = random.choice(my_list)  #从一组数列中随机选择一个数

print(random_choice)  #输出:3




1min




3.2日期和时间模块

Python语言中的datetime模块用于日期和时间的获取、表达和转换,此模块提供了以下类。

(1) datetime: 表示一个具体的日期和时间。

(2) date: 表示一个具体的日期(年、月、日)。

(3) time: 表示一天中的时间。

(4) timedelta: 表示两个日期或时间之间的差异。

根据日期和时间,可以得到与日期和时间相关的信息,例如一个月内的留言、一天内的留言或设定八小时后的工作等。



8min



3.2.1日期时间datetime类

通常datetime类包含对日期和时间的处理,以下是datetime模块中常用的方法。

(1) datetime.now(): 返回当前日期和时间。

(2) datetime.strptime(date_string, format): 根据指定的格式字符串将字符串解析为日期。

(3) datetime.combine(date, time): 将给定的日期和时间组合成一个新的datetime对象。


(4) datetime.date(): 返回datetime对象的日期部分。

(5) datetime.time(): 返回datetime对象的时间部分。

(6) datetime.timestamp(): 返回表示日期和时间的浮点数时间戳。

(7) datetime.strftime(format): 将datetime对象格式化为字符串。

(8) datetime.isoformat(): 将datetime对象格式化为ISO 8601格式的字符串。

(9) datetime.replace(year, month, day, hour, minute, second, microsecond): 返回一个新的datetime对象,使用指定的年、月、日、时、分、秒和微秒部分替换当前对象的相应部分。

(10) datetime.isoweekday(): 返回ISO周几的整数,其中1表示星期一,7表示星期日。

以下是一些使用datetime模块处理时间和日期的例子。

【示例31】获取当前日期和时间,代码如下:


from datetime import datetime  #导入datetime模块的datetime类  



now = datetime.now() #获取当前日期和时间

print("当前时间:", now)



#输出的结果如下

当前时间: 2023-12-27 20:53:10.254654


由于要使用datetime模块,所以必须在程序的第1行导入相应的模块和类。在语句from datetime import datetime中,第1个datetime表示模块名,第2个datetime表示datetime类。

【示例32】将指定数字组成日期类型,代码如下:


from datetime import date  #导入datetime模块的date类



#创建一个特定日期的实例  

d = date(2023, 7, 4) #2023年7月4日 

print("特定日期:", d)



#输出的结果如下

特定日期: 2023-07-04


【示例33】日期格式化,代码如下: 


from datetime import datetime  



#获取当前时间  

now = datetime.now()  



#格式化输出  

formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")  

print("当前时间为", formatted_time)


使用strftime()方法将当前时间格式化为字符串。strftime()方法的参数是一个格式字符串,它指定了日期的输出格式。在这个示例中,使用%Y%m%d %H:%M:%S作为格式字符串,它将日期和时间格式化为"年月日 时:分:秒"的格式。

也可以使用不同的格式字符串来控制日期的输出格式。例如,如果想要将日期和时间格式化为"月/日/年 时:分:秒"的格式,则可以将格式字符串改为"%m/%d/%Y %H:%M:%S"。



7min




【示例34】获取5天内的所有日期,代码如下:


#第3章 3.2 获取5天内的所有日期

from datetime import datetime,timedelta  



#获取5天内的所有日期  

current_date = datetime.now()  

dates_in_month = [] 

future_date=current_date + timedelta(days=5) 

while current_date <future_date:

dates_in_month.append(current_date)	

current_date += timedelta(days=1)  



print("5天内的所有日期:") 

for date in dates_in_month:

print(date)



#输出的结果如下

5天内的所有日期:

2024-01-30 21:11:52.499425

2024-01-31 21:11:52.499425

2024-02-01 21:11:52.499425

2024-02-02 21:11:52.499425

2024-02-03 21:11:52.499425




4min



3.2.2时间间隔timedelta类

其中timedelta 是 datetime 模块中的一个类,用于表示时间间隔,其参数包括以下几个。

(1) days: 表示天数,可以为正数(表示天数)或负数(表示往前推的天数,下同)。

(2) seconds: 表示秒数。

(3) microseconds: 表示微秒数。

(4) milliseconds: 表示毫秒数。

(5) minutes: 表示分钟数。

(6) hours: 表示小时数。

(7) weeks: 表示周数。

这些参数都是可选的,可以根据需要选择使用。例如,可以使用 timedelta(days=10) 表示10天的时间间隔。

【示例35】timedelta用于表示时间间隔,即两个日期或时间之间的差异。可以得到当前时间,并推断当前时间之后8h45min后的日期,代码如下:


#第3章 3.3 计算两个日期之间的间隔

from datetime import datetime, timedelta    

#获取当前日期  

now = datetime.now()  

print("当前日期:", now)  



#创建8h45min后的日期  

future_date = now + timedelta(hours=8, minutes=45)  

print("8h45min后的日期:", future_date)  



#计算两个日期之间的差异  

difference = future_date - now  

print("日期差:", difference)



#输出的结果如下

当前日期: 2024-01-12 14:36:05.641164

8h45min后的日期: 2024-01-12 23:21:05.641164

日期差: 8:45:00


3.2.3日期date类

在Python的date模块中,主要提供了date类,用于表示日期(年、月、日)。以下是一些常用的方法。

(1) date(year, month, day): 创建一个表示指定日期的date对象。

(2) year、month、day: 获取日期的年、月、日部分。

(3) replace(year, month, day): 返回一个新的日期对象,使用指定的年、月、日部分替换当前日期对象中的相应部分。

(4) weekday(): 返回日期对应的星期几,其中0表示星期一,6表示星期日。

(5) isoweekday(): 返回日期对应的ISO周几,其中1表示星期一,7表示星期日。

(6) isocalendar(): 返回包含年份、ISO周数和一周中的日期的元组。

(7) strftime(format): 根据指定的格式字符串将日期格式化为字符串。

【示例36】演示date模块的用法,代码如下:

 
#第3章 3.4 date模块的用法

from datetime import date,datetime  



#创建一个date对象  

d = date(2023, 7, 5)

#获取当前日期和时间  

#d = datetime.now() 





#获取date对象中的年、月、日部分

year = d.year  

month = d.month  

day = d.day  

print(year, month, day)  #输出:2023 7 5  



#使用replace方法替换年、月、日部分  

new_d = d.replace(year=2024, month=8, day=15)  

print(new_d)  #输出:2024-08-15  



#获取星期几和ISO星期几  

weekday = d.weekday()  

isoweekday = d.isoweekday()  

print(weekday, isoweekday)  #输出:4 5(根据实际日期而定)  



#将日期格式化为字符串  

formatted_date = d.strftime("%Y-%m-%d")  

print(formatted_date)  #输出:2023-07-05




8min



3.2.4时间time类

在Python的time类中,提供了一系列与时间相关的功能,以下是一些常用的方法。

(1) time(): 返回当前的时间戳,表示从1970年1月1日00:00:00起经过的秒数。

(2) sleep(seconds): 暂停程序执行指定的秒数,参数seconds代表秒数。

(3) localtime(): 将时间戳转换为本地时间的time.struct_time元组。

(4) gmtime(): 将时间戳转换为UTC时间的time.struct_time元组。

(5) asctime(time_tuple): 将time.struct_time元组格式化为字符串表示。

(6) ctime(seconds): 将时间戳转换为字符串表示。

(7) strptime(string, format): 根据指定的格式字符串解析字符串中的时间。

这些方法可以帮助我们在Python中进行时间戳计算、格式化时间、处理本地时间和UTC时间等操作。有时需要使用和时间相关的组件,例如提醒用户在某个时间节点做什么事情。

【示例37】时间的输出,代码如下:


import time



#将时间值格式化输出 

current_time = time.strftime("%H:%M", time.gmtime())

print(f"现在的时间为{current_time}。")



#输出的结果如下

现在的时间为06:41。


【示例38】时间的比较和定时执行某项工作,代码如下: 


#第3章 3.5 定时执行某项工作

import time



last_time = time.time()

current_time = time.strftime("%H:%M", time.localtime())

print(f"当前的时间为 {current_time},1分钟后有提示信息")



time.sleep(60)  #其中sleep()函数指延迟执行程序给定的秒数



new_cur_time = time.time()

time_passed = int((new_cur_time - last_time) / 60)  #计算时间差

print(f" {time_passed} 分钟过去了,请按时完成任务")



#输出的结果如下

当前的时间为 14:51,1分钟后有提示信息

 1 分钟过去了,请按时完成任务


3.3实训作业

(1) 编写一个程序,输入一个正整数,使用数学模块中的函数计算其阶乘。

(2) 已知列表numbers = [5, 2, 8, 1, 9],使用数学模块中的函数求出最大值和最小值。

(3) 编写一个程序,输入一个日期,计算该日期的前一天和后一天,使用时间和日期模块中的函数完成计算。

(4) 编写一个程序,输入两个日期,计算两个日期之间的天数差,使用时间和日期模块中的函数完成计算。

(5) 编写一个程序,输入一个日期,判断该日期是星期几,使用时间和日期模块中的函数完成判断。