内置模块:Python官方提供了数量众多的模块。本章归纳一些常用模块,其他不常用的可以查询Python官方的API文档。
15.1 math模块
math模块中的函数只是整数和浮点,不包括复数,复数计算需要使用math模块。
15.1.1 舍入函数
math.ceil(a)返回大于或等于a的最小整数
math.floor(a)返回小于或等于a的最大整数
Python还提供了一个内置函数round(a),该函数用来对a进行四舍五入计算。
15.1.2 幂和对数函数
๏ math模块提供的幂和对数相关函数如下:
๏ 对数运算。math.log(a[, base])返回以base为底的a对数;省略底数 base,是a自然对数。
๏ 平方根。math.sqrt(a)返回a的平方根。
๏ 幂运算。math.pow(a, b)返回a的b次幂的值。
15.1.3 三角函数
๏ math.sin(a)。返回弧度a的三角正弦。
๏ math.cos(a)。返回弧度a的三角余弦。
๏ math.tan(a)。返回弧度a的三角正切。
๏ math.asin(a)。返回弧度a的反正弦。
๏ math.acos(a)。返回弧度a的反余弦。
๏ math.atan(a)。返回弧度a的反正切。
math.degrees(a):将弧度a转化为角度
math.radians(a):将角度a转换为弧度
:math.pi
15.2 random 模块
random 模块生成随机数函数:
๏ random.random()。返回在范围大于等于0.0,且小于1.0中的随机浮点数。
๏ random.randrange(stop)。返回在范围大于等于0,且小于stop,步长为1随机整数。
๏ random.randrange(start, stop[, step])。返回在范围大于等于start, 且小于stop,步长为step随机整数。
๏ random.randint(a, b)。返回在范围大于等于a,且小于等于b之间的随机整数。
import random
# 0.0 <= x < 1.0随机数
print('0.0 <= x < 1.0随机数')
for i in range(0, 10):
x = random.random()
print(x)
# 0 <= x < 5随机数
print('0 <= x < 5随机数')
for i in range(0, 10):
x = random.randrange(5)
print(x, end=' ')
# 5 <= x < 10随机数
print()
print('5 <= x < 10随机数')
for i in range(0, 10):
x = random.randrange(5,10)
print(x, end=' ')
# 5 <= x <= 10随机数
print()
print('5 <= x <= 10随机数')
for i in range(0, 10):
x = random.randint(5,10)
print(x, end=' ')
15.3 datetime模块
Python官方提供的日期和时间模块主要有time和datetime模块。
time偏重于底层平台,模块中大多数函数会调用本地平台上的C链接库,因此有些函数运行的结果,在不同的平台上会有不同。
datetime模块对time模块进行了封装,提供了高级的API,重点介绍。
datetime模块中提供了几个类:
๏ datetime:包含时间和日期。
๏ date:只包含日期。
๏ time:只包含时间。
๏ timedelta:计算时间跨度。
๏ tzinfo:时区信息。
15.3.1 datetime、date和time类
datetime模块的核心类是datetime、date和time类。
1)datetime类
一个datetime对象可以表示日期和时间等信息,创建datetime对象的构造方法:
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
year、mouth和day三个参数是不能省略;
tzinfo是时区参数,默认值是None表示不指定时区
除了tzinfo外,其他参数全部为合理范围内的整数。如果超出范围,会抛出ValueError
datetime类方法有以下几种:
๏ datetime.today():返回当前本地日期和时间。
๏ datetime.now(tz=None):返回指定时区的本地当前日期和时间,如果参数tz为None或未指定,则等同于today()。
๏ datetime.utcnow():返回当前UTC(UTC即协调世界时间,比GMT格林尼治标准时间更加精准)日期和时间。
๏ datetime.fromtimestamp(timestamp,tz=None):返回与UNIX时间戳(自UTC时间1970年1月1日00:00:00以来至现在的总秒数)对应的本地日期和时间。
๏ datetime.utcfromtimestamp(timestamp,tz=None):返回与UNIX时间戳对应的UTC日期和时间。
datetime.utcnow()与datetime.today()相比晚8个小时,因为datetime.today()是本地时间,是东八区时间或北京时间,本地时间比UTC时间早8个小时。
同样,datetime.fromtimestamp()比datetime.utcfromtimestamp()也是早8个小时。
注意:Python时间戳单位是秒,所以会有小数部分。其他语言如Java单位是毫秒
2)date类
一个date对象可以表示日期等信息,创建date对象的构造方法:
datetime.date(year, month, day)
year、mouth和day三个参数是不能省略;参数全部为合理范围内的整数。如果超出范围,会抛出ValueError
使用date需要导入datetime模块。
date类方法有以下几种:
๏ date.today():返回当前本地日期。
๏ date.fromtimestamp(timestamp):返回与UNIX时间戳对应的本地 日期。
3)time类
一个time对象可以表示时间等信息,创建time对象的构造方法:
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
所有参数都是可选的,除了tzinfo外,其他参数全部为合理范围内的整数。如果超出范围,会抛出ValueError
使用time时需要导入datetime模块
15.3.2 日期时间计算
如果想知道10天之后是哪一天,或者知道2018年1月1日前五周是哪一天,需要使用timedelta类,timedelta对象用于计算datetime、date和time对象时间间隔。
timedelta类构造方法:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数都是可选的,参数可以为整数或浮点数,可以为正数或负数。在timedelta内部只保存days(天)、seconds(秒)和microseconds(微秒)变量,所以其他参数milliseconds(毫秒)、minutes(分钟)和weeks(周)都应换算成days、seconds和microseconds三个参数。
使用timedelta对象可以精确到微秒,这里不再赘述。
15.3.3 日期时间格式化和解析
日期和时间需要进行格式化输出,使它符合当地人查看日期和时间的习惯。与日期时间格式化输出相反的操作为日期时间的解析。
当用户使用应用程序界面输入日期时,计算机能够读入的是字符串,经过解析这些字符串获得日期和时间对象。
๏ 日期时间格式化使用strftime()方法,datetime、date和time三个类都有一个实例方法strftime(format)
๏ 日期时间解析使用datetime.strptime(date_string,format)类方法,date和time没有strptimne()方法
strftime()和strptime()都有一个格式化参数format,用来控制日期时间的格式。
常用的日期和时间格式控制符:
提示:表中的数字都是十进制数字。控制符会因平台不同有所区别,这是因为Python调用本地平台C库的strftime()函数而进行日期和时间格式化。事实上这些控制符是1989版C语言控制符,表中只列出了常用的控制符,更多控制符可以参考下面的网址:
https://docs.py-thon.org/3/library/datetime.html#strftime-strptime-behavior
15.3.4 时区
datetime和time对象只是单纯表示本地日期和时间,没有时区信息。如果想带有时区信息,可以使用timezone类,它是tzinfo的子类,提供了UTC偏移时区的实现,timnezone构造方法:
datetime.timezone(offset, name=None)
offset是UTC偏移量,+8是东八区,北京在此时区;-5是西五区,纽约在此时区,0是零时区,伦敦在此时区。
name是时区名字,如Asia\Beijing,可省略。
使用from import语句导入datetime模块,明确指定导入datetime、timezone和timedelta类,这样在使用时不必在类的前面再加datetime模块名了,使用简洁。想导入所有的类使用from datetime import*。
astimezone()是调整时区。