• python基础语法 - 常用模块


    • 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)
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    • 运行结果
      在这里插入图片描述

    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
      %pAM或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级别信息")
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 运行结果
      在这里插入图片描述
    • 改为DEBUG级别
      import logging
      
      logging.basicConfig(level=logging.DEBUG)
      
      logging.debug('这是DEBUG级别信息')
      logging.info("这是INFO级别信息")
      logging.warning("这是warning级别信息")
      logging.error("这是ERROR级别信息")
      logging.critical("这是CRITICAL级别信息")
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 运行结果
      在这里插入图片描述
    • 注意,在输出的日志信息中会有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级别信息")
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
    • 输出结果
      在这里插入图片描述

    日志信息格式化

    • 可以根据自己的需要设置日志信息的格式化。常用格式化参数如下:

      日志格式参数说明
      %(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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    • 输出结果
      在这里插入图片描述

    日志重定位

    • 日志信息默认是输出到控制台的,可以将日志信息输出到日志文件中,甚至可以输出到网络中的其他计算机。
    • 示例
      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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
    • 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()
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
  • 相关阅读:
    二极管如何工作?
    不堆概念、换个角度聊多线程并发编程
    CobalStrike(CS)上线隐藏IP和流量
    uni-app入门:页面布局之window和tabbar
    大学生线上学习行为的聚类、成因与对策研究
    全志A40i android7.1 移植wifi驱动的一般流程
    Vue脚手架搭建及说明
    冰冰学习笔记:二叉树的功能函数和OJ练习题
    golang记录一下Reflect包Type类型NumMethod的一个小问题
    javaweb
  • 原文地址:https://blog.csdn.net/Cherish1ove/article/details/126202542