常用模块
- python中日常开发常用的模块,其他不常用可以查询python官方API文档。
math模块
- 用以常用数学运算,操作数只有整数和浮点数,不包括复数,复数计算需使用cmath模块。
舍入函数
math.ceil(a)
:返回大于或等于a的最小整数。math.floor(a)
:返回小于或等于a的最大整数。round(a)
:对a进行四舍五入运算
幂和对数函数
math.log(a, [base])
:返回以base为底的a的对数,没有base,则默认a的自然对数 。math.sqrt(a)
:返回a的平方根。math.pow(a, b)
:返回a的b次幂的值。
三角函数
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转为弧度。
random模块
- 生成随机数(伪随机数)。
random.random()
:返回在范围大于或等于0.0,小于1.0内的随机浮点数。random.randrange(endnum)
:返回在范围大于或等于0.0,小于endnum,步长为1的随机整数。random.randrange(startnum, endnum [, step])
:返回在范围大于或等于startnum,小于endnum,步长为step的随机整数。random.randint(a,b)
:返回在范围大于或等于a,小于或等于b,之间的随机整数。import random for i in range(0,3): x = random.random() print(x) for i in range(0,5): a = random.randrange(5, 30, 2) print(a) for i in range(0,3): b = random.randint(3, 9) print(b)
- 运行结果
datetime模块
- 官方提供的日期和时间模块,其实还有time,不过datetime模块是对time模块的封装,提供更高级API。
- datetime模块提供以下几个类(前三个是核心):
- datetime:包含时间和日期
- date:只包含日期
- time:只包含时间
- timedelta:计算时间跨度
- tzinfo:时区信息
datetime类(日期和时间)
- 一个datetime对象可以表示日期和时间等信息。
- 创建datetime对象的构造方法为:
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
- year,month,day不可省略;tzinfo默认为None,表示不指定时区;其他参数全部为合理范围内的整数。
- 参数取值范围如下表:
- 示例,超出合理范围时会报错。
- 常用类方法
datetime.today()
:返回当前本地日期和时间。datetime.now(tz=None)
:返回本地当前的日期和时间,如果tz=None,同today()。datetime.utcnow()
:返回当前UTC日期和时间。datetime.fromtimestamp(timestamp, tz=None)
:返回与UNIX时间戳对应的本地日期和时间。datetime.utcfromtimestamp(timestamp)
:返回与UNIX时间戳对应的UTC日期和时间。
- 示例
date类(日期)
- 一个date对象可以表示日期等信息。
- 创建date对象的构造方法:
datetime.date(year, month, day)
- 三个参数不可省略,且在参数合理范围内取值。
- 常用类方法:
date.today()
:返回当前本地日期。date.fromtimestamp(timestamp)
: 返回与UNIX时间戳对应的本地日期。
- 示例
time类(时间)
- 一个time对象可以表示一天中时间的信息。
- 创建time对象的构造方法:
datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
- 所有参数都是可选的,除tzinfo外,其他参数都应该在合理范围内,参考datetime类的表格。
timedelta类(日期时间计算)
- timedelta对象用于计算datetime、date和time对象时间间隔。
- 其构造方法:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
- 所有参数都是可选的,参数可以为整数或浮点数,可以为正数或负数。
格式化与解析
-
格式化:将日期和时间,通过某种格式显示,满足当地人查看日期和时间的习惯。
-
解析:与格式化操作相反,将用户输入的日期和时间字符串,解析为对象。
-
strftime(format)
:格式化 -
strptime(date_string, format)
:解析 -
关于format,常见的日期和时间控制符
指令 含义 示例 %m 两位月份表示 01、02、12 %y 两位年份表示 08、18、20 %Y 四位年份表示 2008、2018、2020 %d 月内中的一天 1、2、3 %H 两位小时表示(24小时制) 00、01、23 %I 两位小时表示(12小时制) 01、03、12 %p AM或PM区域性设置 AM和PM %M 两位分钟表示 00、01、58 %S 两位秒表示 00、01、45 %f 用6位数表示微秒 000000、000001、999999 %z +HHMM或-HHMM形式的UTC偏移 +0000、-0400,如果没有设置时区为空 %Z 时区名称 UTC、EST、CST,没有设置时区为空 -
示例
时区
- datetime和time对象只是单纯地表示本地的日期和时间,没有时区信息。想带有时区信息,可以使用timezone类,它是tzinfo的子类,提供了UTC偏移时区的实现。
- 构造方法:
datetime.timezone(offset, name=None)
- offset是UTC偏移量,+8是东八区,北京在此时区;-5是西五区,纽约在此时区;0是零时区,伦敦在此时区。
- name参数是时区名字,如Asia/Beijing,可以省略。
logging日志模块
- 不能只依靠print()函数做复杂的日志输出,可以使用内置logging模块。
日志级别
- logging模块提供5种常用级别,如下图,级别从上到下,由低到高。
- 如果设置了DEBUG级别,debug()函数和其他级别的函数的日志信息都会输出;如果设置ERROR级别,error()和critical()函数的日志信息会输出。
import logging logging.basicConfig(level=logging.ERROR) logging.debug('这是DEBUG级别信息') logging.info("这是INFO级别信息") logging.warning("这是warning级别信息") logging.error("这是ERROR级别信息") logging.critical("这是CRITICAL级别信息")
- 运行结果
- 改为DEBUG级别
import logging logging.basicConfig(level=logging.DEBUG) logging.debug('这是DEBUG级别信息') logging.info("这是INFO级别信息") logging.warning("这是warning级别信息") logging.error("这是ERROR级别信息") logging.critical("这是CRITICAL级别信息")
- 运行结果
- 注意,在输出的日志信息中会有root关键字,说明了进行日志输出的对象是root日志器。可以使用
getLogger()
函数创建自己的日志器对象,代码:logger = logging.getLogger(__name__)
getLogger()
函数的参数是一个字符串,__name__
是当前模块名。import logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) logger.debug('这是DEBUG级别信息') logger.info("这是INFO级别信息") logger.warning("这是warning级别信息") logger.error("这是ERROR级别信息") logger.critical("这是CRITICAL级别信息")
- 输出结果
日志信息格式化
-
可以根据自己的需要设置日志信息的格式化。常用格式化参数如下:
日志格式参数 说明 %(name)s 日志器名 %(asctime)s 输出日志时间 %(filename)s 包括路径的文件名 %(funcName)s 函数名 %(levelname)s 日志等级 %(processName)s 进程名 %(threadName)s 线程名 %(message)s 输出信息 -
示例
import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(threadName)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) logger.debug('这是DEBUG级别信息') logger.info("这是INFO级别信息") logger.warning("这是warning级别信息") logger.error("这是ERROR级别信息") logger.critical("这是CRITICAL级别信息") def funclog(): logger.info("进入funclog函数") logger.info('调用funclog函数') funclog()
-
输出结果
日志重定位
- 日志信息默认是输出到控制台的,可以将日志信息输出到日志文件中,甚至可以输出到网络中的其他计算机。
- 示例
import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(threadName)s - %(name)s - %(funcName)s - %(levelname)s - %(message)s', filename="test.log") logger = logging.getLogger(__name__) logger.debug('这是DEBUG级别信息') logger.info("这是INFO级别信息") logger.warning("这是warning级别信息") logger.error("这是ERROR级别信息") logger.critical("这是CRITICAL级别信息") def funclog(): logger.info("进入funclog函数") logger.info('调用funclog函数') funclog()
filename=test.log
,设置日志文件名,包括路径,日志信息写进此文件中。- 输出结果
使用配置文件
- 之前的例子中,日志配置的文件都是在basicConfig()函数中进行的,很不方便,也不利于维护。
- 可以使用配置文件,配置信息从配置文件中读取。
- 配置文件
- 示例
import logging import logging.config logging.config.fileConfig("logger.conf") logger = logging.getLogger('logger1') logger.debug('这是DEBUG级别信息') logger.info("这是INFO级别信息") logger.warning("这是warning级别信息") logger.error("这是ERROR级别信息") logger.critical("这是CRITICAL级别信息") def funclog(): logger.info("进入funclog函数") logger.info('调用funclog函数') funclog()