内容正文:
第2章 Python语言基础
2.1 基本数据类型
2.2 变量
2.3 运算符与表达式
2.4 输入与输出
2.5 内置函数
2.6 常用模块
2.6 常用模块
模块(Module) :将函数按功能划分在一起,存放在一个.py文件中,一个.py文件既是一个模块。
用户可以使用标准库中的模块(如math, random),也可使用第三方模块(numpy, pandas)。用户还可自行编写模块(即Python源文件) 。
pip list # 列出已安装的第三方模块,但不含内置模块
Python标准库也称为内置库或内置模块,是Python自带的开发包,它会随Python解释器一起安装在系统中。
模块使用前要先导入,下面介绍模块导入语法 import。
2.6 常用模块
2.6.1 模块导入
编程时如需使用某个模块,首先要使用 import 语句将该模块导入。导入有如下几种方式:
(1)常规导入
常规导入就是将整个模块直接导入,模块的所有变量、对象和函数在编程时都可以使用。
导入格式为: import 模块名 , 使用格式为:模块名.函数名
例:导入math数学模块
import math # 导入整个math模块
math.pi # 调用math模块中的pi常量
Out: 3.141592653589793
math.sin(math.pi / 2) # 调用math模块中的pi常量和sin()函数
Out: 1.0
2.6 常用模块
(2)使用别名
在导入模块时,给模块取别名,程序调用时用简短的别名代替模块名,格式为:
import 模块名 as 别名
import math as m # 导入math模块时,并取别名为m
m.pi # 调用m模块中的pi常量
Out: 3.141592653589793
m.sin(m.pi / 2) # 调用m中的pi常量和sin()函数
Out: 1.0
import numpy as np # 后续章节导入模块时都用了别名
import pandas as pd
import turtle as t
2.6 常用模块
(3)部分导入
不导入整个模块,只导入需要使用的变量、对象或函数。格式为:
from 模块名 import 变量名或函数名 as 别名
使用格式: 函数名 # 前面不用再写模块名
from math import pi, sin, factorial as fac
pi # 调用时直接写常量名pi
Out: 3.141592653589793
sin(pi / 2) # 调用时直接写常量名pi和sin()函数名
Out: 1.0
fac(5) # 阶乘函数
Out: 120
2.6 常用模块
(4)全部直接导入
前面介绍了直接导入模块中的部分成员。如果要将全部成员都直接导入,格式为:
from 模块名 import *
* 表示模块内的所有成员
from math import * # 将math模块的所有成员都直接导入
pi # 调用时直接写常量名pi
sin(pi / 2) # 调用时直接写常量名pi和sin()函数名
但一般不推荐这种方式,因为如果导入了多个模块,调用函数时就不清楚是来自哪个模块了。建议用第1, 2种方式。
2.6 常用模块
2.6.2 math数学模块
math模块是Python内置的数学函数库,提供了4个数学常量和众多数学函数。使用前先导入:
import math
dir(math) # 显示math内的函数清单
help(math) # 显示每个函数的简单语法格式
math.e # 自然常数
math.pi # 圆周率
参考 https://www.cnblogs.com/renpingsheng/p/7171950.html
2.6 常用模块
表2.23 math模块中部分常量和函数
函数名 功能
math.e 自然常数e
math.pi 圆周率pi
math.acos(x) 返回x的反三角余弦值
math.asin(x) 返回x的反三角正弦值
math.atan(x) 返回x的反三角正切值
math.ceil(x) 返回不小于x的整数
math.cos(x) 返回x(弧度)的三角余弦值
math.copysign(x, y) 若y<0,返回-1乘以x的绝对值; 否则,返回x的绝对值
math.degrees(x) 弧度转度
math.exp(x) 返回e的x次方
math.fabs(x) 返回x的绝对值
math.factorial(x) 返回x的阶乘
math.fmod(x, y) 返回x%y(取余)
math.floor(x) 返回不大于x的整数
math.fsum([x, y, ...]) 返回无损精度的和
math.isinf(x) 若x为无穷大,返回True;否则,返回False
math.isnan(x) 若x不是数字,返回True;否则,返回False
math.log(x[, base]) 返回x的以base为底的对数,base默认为e
math.log10(x) 返回x的以10为底的对数
math.modf(x) 返回x的小数和整数
math.pow(x, y) 返回x的y次方
math.radians(x) 度转弧度
math.sin(x) 返回x(弧度)的三角正弦值
math.sqrt(x) 返回x的平方根
math.tan(x) 返回x(弧度)的三角正切值
math.trunc(x) 返回x的整数部分
2.6 常用模块
【例】math模块的常量和函数的应用
import math
math.floor(3.14) # 返回<=3.14的最大整数
Out: 3
math.ceil(3.14) # 返回>=3.14的最小整数
Out: 4
math.radians(45) # 角度转弧度
Out: 0.7853981633974483
math.degrees(math.pi) # 弧度转角度
Out: 180.0
math.exp(2) # e 的2次方
Out: 7.38905609893065
math.sqrt(4) # 开平方
Out: 2.0
2.6 常用模块
【例】math模块的常量和函数的应用
math.factorial(5) # 阶乘函数
Out: 120
math.sin(math.pi / 2)
Out: 1.0
math.sin(45/180*math.pi ) # sin需要弧度参数,手工角度转弧度
math.sin(math.radians(45)) # 或用radians将角度转弧度
Out: 0.7071067811865476
注意, math不能处理复数。复数需要使用 cmath 模块
import cmath
cmath.sqrt(-1) # -1开根号为复数
Out: 1j
2.6 常用模块
2.6.3 random随机数模块
random模块提供了多个随机数函数,生成的都是伪随机数,由随机种子值控制,按一定算法依次生成。
import random as ran
ran.seed(1) # 如不设固定种子值,则按当前时间取随机种子值
print(ran.randint(0,10)) # 2
print(ran.randint(0,10)) # 9
ran.seed(1)
print(ran.randint(0,10)) # 2
print(ran.randint(0,10)) # 9
此段代码由于设置了种子1,所以总是返回2, 9的随机整数,确保随机实验的结果可重现。
2.6 常用模块
表2.24 random模块中常用随机数函数
函数名 功能
choice(seq) 从seq(列表/元组/字符串等)中随机选取一个元素
choices(seq, k=num) 从seq中随机选取num个元素(有放回采样)
randrange([start,] stop [,step]) 返回一个在[start, stop)范围内以step为步长的递增整数序列中的随机项
random() 返回一个在[0, 1)内的随机浮点数
seed() 设置随机数种子为n,无返回值
shuffle(seq) 将序列seq中的元素顺序打乱,无返回值
randint(min, max) 返回一个[min, max]范围内的随机整数(可含max)
uniform(min, max) 返回一个[min, max)范围内的随机浮点数
sample(seq, num) 从seq中随机选取num个元素(无放回采样)
2.6 常用模块
【例】常用随机数函数的应用
import random
random.random() # 前面是模块名,后面是函数名
Out: 0.9551421885236997
random.uniform(1, 10) # 获得[1,10)内的随机浮点数
Out: 9.09577665686459
random.randint(1, 10) # 获得[1,10]内的随机整数
Out: 3
random.choice((1, 2, 3, 4, 5)) # 在(1, 2, 3, 4, 5)中随机选择一个数
Out: 4
random.choices((1, 2, 3, 4, 5), k=3) # 在(1, 2, 3, 4, 5)中随机选择3个数
Out: [3,2,5]
random.sample((1, 2, 3, 4, 5), 2) # 在(1, 2, 3, 4, 5)中随机选择两个数
Out: [4, 2]
lst = list(range(1,55)) # 生成1,2,... 54 的顺序列表
random.shuffle(lst) # 将lst随机乱序
2.6 常用模块
2.6.4 datetime和time模块
Python的datetime模块和time模块提供了处理日期和时间的函数。此为内置模块,不需要再pip安装。time模块提供了各种关于时间操作的函数,datetime模块基于time模块进行了封装,提供了更多的对象。一般多使用datetime模块。
1. time模块
time 模块主要包含各种提供日期、时间功能的类和函数。该模块既提供了把日期、时间格式化为字符串的功能,也提供了将字符串转换为日期、时间的功能。
2.6 常用模块
time模块中表示时间的格式主要有两种:
(1)时间戳
时间戳表示从1970年1月1号 00:00:00开始到现在按秒计算的总秒数,是一个浮点数。这种表示方式广泛应用在Unix和Linux系统中。
import time
start = time.time() # start是时间戳,浮点数
Out:1717814352.7197723 # 小数部分是不足1秒的微秒部分
可用上面的方法测试程序的耗时,例如:
import time
t1 = time.time()
# 用sleep函数模拟程序耗时
time.sleep(3) # 休眠3秒
t2 = time.time()
print('程序共耗时:', t2 - t1)
2.6 常用模块
time模块中表示时间的格式主要有两种:
(2)时间元组
time 模块提供了一个 time.struct_time 类,该类包含 9 个属性,表示:年、月、日、时、分、秒、星期几(0-6)、一年的第几天和夏令时标记。
tmtup = time.localtime() # 返回当前时间对应的struct_time 变量
Out:time.struct_time(tm_year=2023, tm_mon=11, tm_mday=8, tm_hour=12, tm_min=14, tm_sec=29, tm_wday=2, tm_yday=312, tm_isdst=0)
tmtup.tm_mon, tmtup.tm_hour # 月份,小时
time.mktime(tmtup) # mktime将时间元组转为时间戳
time.localtime(0) # 时间戳0转为struct_time类, 1970.1.1 日8:00(东八区)
2.6 常用模块
(3)格式化时间
格式化时间是将时间转换为字符串,例如“2024年2月3日”。
格式 含义
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间表示
%d 一个月中的第几天(01 - 31)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,01 - 12)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(01 - 61)
%w 一个星期中的第几天(0 - 6,0是星期天)
%x 本地相应日期
%X 本地相应时间
%y 去掉世纪的年份(00 - 99)
%Y 完整的年份
%Z 时区的名字(如果不存在为空字符)
2.6 常用模块
时间字符串示例如下:
t = time.localtime() # 取得当前日期和时间
# strftime将时间变量t转换为字符串
time.strftime('%Y-%m-%d %H:%M:%S', t) # t 转为字符串
Out: '2023-11-08 12:18:32'
time.strftime('%x %X %B %A', t) # 本地日期 时间 月份 星期
Out: '11/08/23 12:18:32 November Wednesday'
# strptime将字符串转换为时间
x = time.strptime('2023-05-01', '%Y-%m-%d')
Out: time.struct_time(tm_year=2023, tm_mon=5, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=121, tm_isdst=-1)
2.6 常用模块
2. datetime模块
datatime模块重新封装了time模块,它以类的方式提供了多种日期和时间的表达方式,提供的类有:datetime.date、datetime.time、datetime.datetime、datetime.timedelta和datetime.tzinfo。
例:创建datetime.datetime对象
import datetime
# 创建一个指定年、月、日的对象
datetime.datetime(2023, 5, 1)
Out: datetime.datetime(2023, 5, 1, 0, 0) # 年、月、日,0时0分
datetime.time(10, 5, 30)
Out: datetime.time(10, 5, 30) # time类只含时分秒
参考:https://www.cnblogs.com/awakenedy/articles/9182036.html
2.6 常用模块
# 创建一个指定年、月、日、时、分、秒的对象
t = datetime.datetime(2023, 5, 1, 14, 32, 45)
Out: datetime.datetime(2023, 5, 1, 14, 32, 45)
d = t.timestamp() # 将前面创建的 t对象转为时间戳d
Out: 1682922765.0
# 利用时间戳d创建datetime对象
datetime.datetime.fromtimestamp(d)
Out: datetime.datetime(2023, 5, 1, 14, 32, 45)
# 时间戳 1 对应下面的时间
datetime.datetime.fromtimestamp(1) # 1970-1-1 8:0:1
2.6 常用模块
(2)datetime.datetime类的方法和属性
from datetime import datetime
方法名/属性名 描述
datetime.max 最大时间
datetime.min 最小时间
datetime.today() 返回当前本地时间
datetime.now() 返回当前本地时间
datetime.utcnow() 返回当前UTC时间
datetime.combine(date,time) 把指定的date和time对象整合为datetime对象
datetime.strptime(date_string,format) 将字符串转换为datetime对象
datetime.strftime(dt,format) 将datetime对象转为字符串
2.6 常用模块
from datetime import datetime
datetime.max # 获得最大时间
Out: datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
datetime.today() # 获得当前本地时间
Out: datetime.datetime(2023, 11, 8, 12, 24, 31, 770145)
datetime.utcnow() # 获得当前UTC(格林尼治标准)时间
Out: datetime.datetime(2023, 11, 8, 4, 24, 52, 28797)
# 字符串转换为日期对象
dt = datetime.strptime('2023-3-5', '%Y-%m-%d')
dt
Out: datetime.datetime(2023, 3, 5, 0, 0)
datetime.strftime(dt, '%m-%d') # 日期转换为字符串
Out: '03-05'
dt.strftime('%Y-%m-%d') # 日期转换为字符串
Out: '2023-03-05'
【例】datetime.datetime类的常用函数与属性的应用。
2.6 常用模块
(3)datetime.datetime类的对象的常用方法与属性
dt = datetime.datetime.now ()
方法名/属性名 描述
dt.year 年
dt.month 月
dt.day 日
dt.hour 时
dt.minute 分
dt.second 秒
dt.microsecond 微秒
dt.tzinfo 时区信息
dt.date() 获取dt的date对象
dt.time() 获取dt的time对象
dt.replace() 指定参数替代(年,月,日,时,分,秒,微秒,时区),生成并返回新对象
dt.timestamp() 返回dt对象对应的时间戳
dt.weekday() 返回数字0至6,分别对应星期一至星期日
dt.isoformat() 返回格式如'YYYY-MM-DD HH:MM:SS'的字符串
dt.strftime(format) 返回指定格式的时间字符串
2.6 常用模块
【例】datetime.datetime类的对象常用方法与属性
dt = datetime.datetime(2023, 5, 1, 14, 32, 45)
dt.year # 获得年份, 属性,不需括号
Out: 2023
dt.month # 月份
Out: 5
dt.day # 日
Out: 1
dt.hour # 小时
Out: 14
dt.minute # 分钟
Out: 32
dt.second # 秒
Out: 45
2.6 常用模块
【例】datetime.datetime类的对象常用方法与属性
dt.date() # 获得日期,此为方法需括号
Out: datetime.date(2023, 5, 1)
dt.time()
Out: datetime.time(14, 32, 45) # 时间
dt.timestamp() # 时间戳
Out: 1682922765.0
dt.weekday() #星期几: 0(星期一) - 6 (星期日)
Out: 0
dt.isoweekday() # ISO星期几: 1(星期一) - 7 (星期日)
Out: 1
dt.isoformat() # 按iso格式输出日期和时间
Out: '2023-05-01T14:32:45'
dt.strftime("%a") # 输出本地简化星期名称
Out: 'Mon'
程序练习
1. 输出0,1,2,...30 度角的sin值,保留4位小数。
import math
for x in range(31):
s = math.sin(x/180*math.pi)
print(f'sin({x:2d})={s:6.4f}')
程序练习
2. 输入类似 2024-3-8的日期字符串,输出星期几,并判断该日是当年的第几天。
from datetime import datetime
s = input('输入日期(格式 2024-3-8):')
d = datetime.strptime(s,'%Y-%m-%d') # 转日期
print(s, '星期', d.isoweekday())
firstday=datetime(d.year,1,1) # 构造当年的第1天
print('{}是当年的第{}天'.format(s, (d-firstday).days+1))
$$