今日学习目标:

  • 学习并应用collections、time与datetime、random随机数模块知识

今日学习内容:

  1. collections模块
  2. time与datetime模块
  3. random随机数模块

内容详情:

collections模块

这个模块实现了特定目标的容器,以提供Python标准内建容器 dict、list、set、tuple 的替代选择。

内部方法官方介绍:

函数名 功能
Counter 字典的子类,提供了可哈希对象的计数功能
defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供了默认值
OrderedDict 字典的子类,保留了他们被添加的顺序
namedtuple 创建命名元组子类的工厂函数
deque 类似列表容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap 类似字典的容器类,将多个映射集合到一个视图里面

部分方法个人理解:

  1. namedtuple
    简介
    具名元祖(加强版tuple),可以使tuple更加语义化。之前我们写一个元祖tuple,对内部元素不能进行命名。往往我们并不知道一个元祖所要表达的意义,而namedtuple很好的解决了此问题。(可以变相地理解为字典化的元组)
    语法结构

    namedtuple('tuple_name', 'field_names')# tuple_name 元祖的名称,为字符串,返回一个元组子类,所以我们要对这个对象进行命名。
    # field_name 元祖中元素的名称,通常是一个可迭代的数据,也可以是以逗号隔开的元素名称
    

    用法举例

    from collections import namedtupleperson = namedtuple('人物', 'name age gender')
    p1 = person('jason', 18, 'male')
    p2 = person('kevin', 28, 'female')
    print(p1, p2)
    print(p1.name, p1.age)'''
    # 执行结果
    人物(name='jason', age=18, gender='male') 人物(name='kevin', age=28,             gender='female')
    jason 18
    '''

    特有属性及方法

    • 属性 _fileds
      输出这个类的所有字段名的元祖

      from collections import namedtupleperson = namedtuple('人物', 'name age gender')
      p1 = person('jason', 18, 'male')
      p2 = person('kevin', 28, 'female')
      print(p1._fields)
      print(p2._fields)'''
      # 执行结果
      ('name', 'age', 'gender')
      ('name', 'age', 'gender')
      '''
      
    • 方法 _asdict()
      把具名元祖以collection.OrdereDict的形似返回

      from collections import namedtupleperson = namedtuple('人物', 'name age gender')
      p1 = person('jason', 18, 'male')
      p2 = person('kevin', 28, 'female')
      print(p1._asdict())
      print(p2._asdict())'''
      # 执行结果
      {'name': 'jason', 'age': 18, 'gender': 'male'}
      {'name': 'kevin', 'age': 28, 'gender': 'female'}
      '''
      

  2. deque
    简介
    双向队列,类似于list的容器,可以快速的在队列头部和尾部添加、删除元素
    内部功能分类

    1. append
      从右端添加元素(与list同)
      用法举例

      from collections import dequeq = deque([1, 2, 3])
      print(q)
      q.append(444)
      print(q)'''
      # 执行结果
      deque([1, 2, 3])
      deque([1, 2, 3, 444])
      '''
    2. appendleft
      从左端添加元素
      用法举例

      from collections import dequeq = deque([1, 2, 3])
      print(q)
      q.appendleft(666)
      print(q)'''
      # 执行结果
      deque([1, 2, 3])
      deque([666, 1, 2, 3])
      '''
    3. pop
      移除列表中的一个元素(默认最右端的一个元素),并且返回该元素的值(与list同),如果没有元素,将会报出IndexError
      用法举例

      from collections import dequeq = deque([1, 2, 3])
      print(q)
      print(q.pop())'''
      # 执行结果
      deque([1, 2, 3])
      3
      '''
    4. popleft
      移除列表中的一个元素(默认最左端的一个元素),并且返回该元素的值,如果没有元素,将会报出IndexError
      用法举例

      from collections import dequeq = deque([1, 2, 3])
      print(q)
      print(q.popleft())'''
      # 执行结果
      deque([1, 2, 3])
      1
      '''

  3. Counter
    简介
    计数器,可以支持方便、快速的计数,将元素数量统计,然后计数并返回一个字典,键为元素,值为元素个数。
    内部独特功能

    1. most_common()
      返回一个列表,包含counter中n个最大数目的元素,如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会选择出现早的元素
      用法举例

      from collections import Counterlist1 = ["a", "a", "a", "b", "c", "f", "g", "g", "c", "11", "g", "f", "10", "2"]
      print(Counter(list1).most_common(3))list2 = ["a", "a", "a", "b", "f", "c", "g", "g", "c", "11", "g", "f", "10", "2"]
      print(Counter(list2).most_common(3))'''
      # 执行结果
      [('a', 3), ('g', 3), ('c', 2)]
      [('a', 3), ('g', 3), ('f', 2)]
      '''
    2. elements()
      返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它
      用法举例

      from collections import Counterdic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0}
      print(Counter(dic1))
      print(list(Counter(dic1).elements()))'''
      # 执行结果
      Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2})
      ['a', 'a', 'a', 'b', 'b', 'b', 'b']
      '''
      
    3. subtract()
      从一个可迭代对象中或者另一个映射(或counter)中,元素相减,是数目相减而不是替换它们
      用法举例

      from collections import Counterdic1 = {'a': 3, 'b': 4, 'c': 0, 'd': -2, "e": 0}
      dic2 = {'a': 3, 'b': 4, 'c': 0, 'd': 2, "e": -1, "f": 6}
      a = Counter(dic1)
      print(a)
      b = Counter(dic2)
      print(b)'''
      # 执行结果
      Counter({'b': 4, 'a': 3, 'c': 0, 'e': 0, 'd': -2})
      Counter({'f': 6, 'b': 4, 'a': 3, 'd': 2, 'c': 0, 'e': -1})
      '''
      

  4. OrderedDict
    简介
    有序字典,实现了对字典对象中元素的排序。

    用法举例

    from collections import OrderedDictd2 = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    print(d2)
    d2['x'] = 111
    d2['y'] = 222
    d2['z'] = 333
    print(d2)
    print(d2.keys())'''
    # 执行结果
    OrderedDict([('a', 1), ('b', 2), ('c', 3)])
    OrderedDict([('a', 1), ('b', 2), ('c', 3), ('x', 111), ('y', 222), ('z', 333)])
    odict_keys(['a', 'b', 'c', 'x', 'y', 'z'])
    '''

    如果在已经存在的 key 上添加新的值,将会保留原来的 key 的位置,然后覆盖 value 值。


  5. defaultdict
    简介
    默认字典,是内置数据类型dict的一个子类,基本功能与dict一样,只是重写了一个方法missing(key)和增加了一个可写的对象变量default_factory
    语法结构

    collections.defaultdict([default_factory[, …]])
    

    第一个参数为default_factory属性提供初始值,默认为None;其余参数包括关键字参数(keyword arguments)的用法,和dict构造器用法一样。

    用法举例:使用list作第一个参数,可以很容易将键-值对序列转换为列表字典。

    from collections import defaultdicts=[('yellow',1),('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
    d=defaultdict(list)
    for k, v in s:d[k].append(v)
    a=sorted(d.items())
    print(a)'''
    # 执行结果
    [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]
    '''

time与datetime模块.

  • time模块
    常用方法

    1. time.sleep(secs)
      推迟指定的时间运行,单位为秒
    2. time.time()
      获取当前时间戳

    三种用于表示时间的格式(彼此之间可以转换)
    时间戳<–>结构化时间

    • time.gmtime() 以元组方式返回格林威治时间
    • localtime 将元组时间转换为时间戳

    结构化时间<–>格式化时间

    • time.strftime() 将元组时间转换为字符串格式时间
    • time.strptime() 将字符串格式时间转换为元组格式时间
    1. 时间戳 time.time()
      距离1970年1月1日0时0分0秒至此相差的秒数

    2. 结构化时间 time.localtime()以元组方式返回本地当前时间
      该时间类型主要是给计算机看的,人看起来不太方便

      import timeprint(time.localtime())'''
      # 执行结果
      time.struct_time(tm_year=2022, tm_mon=3, tm_mday=29, tm_hour=19,        tm_min=43, tm_sec=35, tm_wday=1, tm_yday=88, tm_isdst=0)'''
      

      结果说明
      0 tm_year(年) 比如2011
      1 tm_mon(月) 1 - 12
      2 tm_mday(日) 1 - 31
      3 tm_hour(时) 0 - 23
      4 tm_min(分) 0 - 59
      5 tm_sec(秒) 0 - 60
      6 tm_wday(weekday) 0 - 6(0表示周一)
      7 tm_yday(一年中的第几天) 1 - 366
      8 tm_isdst(是否是夏令时) 默认为0

    3. 格式化时间 time.strftime()

      import timeprint(time.strftime('%Y-%m-%d %H:%M:%S'))'''
      # 执行结果
      2022-03-29 19:48:15'''
      

      结果说明
      %y 两位数的年份表示(00-99)
      %Y 四位数的年份表示(000-9999)
      %m 月份(01-12)
      %d 月内中的一天(0-31)
      %H 24小时制小时数(0-23)
      %I 12小时制小时数(01-12)
      %M 分钟数(00=59)
      %S 秒(00-59)
      %a 本地简化星期名称
      %A 本地完整星期名称
      %b 本地简化的月份名称
      %B 本地完整的月份名称
      %c 本地相应的日期表示和时间表示
      %j 年内的一天(001-366)
      %p 本地A.M.或P.M.的等价符
      %U 一年中的星期数(00-53)星期天为星期的开始
      %w 星期(0-6),星期天为星期的开始
      %W 一年中的星期数(00-53)星期一为星期的开始
      %x 本地相应的日期表示
      %X 本地相应的时间表示
      %Z 当前时区的名称
      %% %号本身

  • datetime模块
    注意
    date 意思就是年月日
    datetime 意思就是年月日 时分秒
    基础用法

    1. 返回当前时间

      import datetimeprint(datetime.datetime.now())'''
      # 执行结果
      2022-03-29 19:58:56.239953
      '''
      
    2. 时间戳转换成日期

      import datetimeprint(datetime.date.fromtimestamp(1178766678))'''
      # 执行结果
      2007-05-10
      '''
      
    3. 当前时间+3天

      import datetimeprint(datetime.datetime.now() + datetime.timedelta(+3))'''
      # 执行结果
      2022-04-01 20:02:47.204113
      '''
      
    4. 当前时间-3天

      import datetimeprint(datetime.datetime.now() + datetime.timedelta(-3))'''
      # 执行结果
      2022-03-26 20:03:35.130271
      '''
      
    5. 当前时间+3小时

      import datetimeprint(datetime.datetime.now() + datetime.timedelta(hours=3))'''
      # 执行结果
      2022-03-29 23:04:18.038341
      '''
      
    6. 当前时间+30分钟

      import datetimeprint(datetime.datetime.now() + datetime.timedelta(minutes=30))'''
      # 执行结果
      2022-03-29 20:35:17.594292
      '''
      

random随机数模块

代码中经常有一些生成随机数的需求。特意整理了一下python中random模块的一些相关用法。

基本用法

  1. 随机整数:

    import randomprint(random.randint(0, 99))'''
    # 执行结果
    33
    '''
    
  2. 随机选取0到100间的偶数:

    import randomprint(random.randrange(0, 101, 2))'''
    # 执行结果
    30
    '''
    
  3. 随机浮点数:

    import random
    # 范围 0-10
    print(random.uniform(1, 10))'''
    # 执行结果
    9.109443958042473
    '''
    
  4. 选择一个随机元素

    import randomprint(random.choice('abc'))'''
    # 执行结果
    b
    '''
    
  5. 将一个列表中的元素打乱

    import randomp = ["Python","is", "powerful","simple", "and so on..."]
    random.shuffle(p)
    print(p)'''
    # 执行结果
    ['powerful', 'is', 'simple', 'and so on...', 'Python']
    '''
    
  6. 从指定序列中随机获取指定长度片段

    import randomlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    a = random.sample(list, 5)
    print(list)
    print(a)'''
    # 执行结果
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [8, 10, 3, 9, 6]
    '''
    
  7. 随机字符:

    import randomprint(random.choice('abcdefg&#%^*f'))'''
    # 执行结果
    &
    '''
    
  8. 多个字符中选取特定数量的字符:

    import randomprint(random.sample('abcdefghij', 3))'''
    # 执行结果
    ['f', 'i', 'g']
    '''
    
  9. 多个字符中选取特定数量的字符组成新字符串:

    import randoma = ''.join(random.sample(['a','b','c','d','e','f','g','h','i','j'], 3)).replace(" ","")
    print(a)'''
    # 执行结果
    ghj
    '''
    
  10. 随机选取字符串:

    import randomprint(random.choice(['apple', 'pear', 'peach', 'orange', 'lemon']))'''
    # 执行结果
    apple
    '''
    
  11. 洗牌:

    import randomitems = [1, 2, 3, 4, 5, 6]
    random.shuffle(items)
    print(items)'''
    # 执行结果
    [4, 1, 3, 6, 5, 2]
    '''
    

学习时间:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

学习产出:

  • CSDN 技术博客 1 篇
  • 学习心得录音 1 个
  • 作业
    使用random模块编写一个能够产生随机验证码的代码
    基本要求:产生固定位数的 比如四位
    拔高要求:产生指定位数的 …
    eg:
    要产生四位随机验证码 J2nB
    要产生五位随机验证码 JkO98
import random# 生成小写字母列表
l1 = [chr(i) for i in range(97, 123)]
# 生成大写字母列表
l2 = [chr(i) for i in range(65, 91)]
# 生成0-9数字列表
l3 = ['%s' % i for i in range(0, 10)]
# 生成四位验证码
print(''.join(random.sample(l1 + l2 + l3, 4)).replace(" ", ""))
# 生成五位验证码
print(''.join(random.sample(l1 + l2 + l3, 5)).replace(" ", ""))

Python攻城师的成长————模块突破(collections、time与datetime、random随机数模块)相关推荐

  1. Python攻城师的成长————Django框架(csrf相关装饰器、基于中间件思想编写项目、auth认证模块)

    今日学习目标 逐步掌握csrf相关装饰器.基于中间件思想编写项目.auth认证模块知识点 文章目录 今日学习目标 学习内容 一. csrf相关装饰器 二.基于中间件思想编写项目 三.auth认证模块 ...

  2. Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)

    今日学习目标 学习什么是socket套接字,并依靠它去处理TCP协议等网络编程问题 文章目录 今日学习目标 学习内容 一. socket套接字 1.什么是socket 2.套接字发展史及分类 3.套接 ...

  3. Python攻城师的成长————面向对象的三大特征(继承、多态)

    学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...

  4. Python攻城师的成长————ORM查询

    今日学习目标 熟悉掌握ORM语法操作 文章目录 今日学习目标 学习内容 一.神奇的双下划线查询 二.orm创建外键关系 三.外键字段的增删改查 四.正反向的概念 五.ORM多表查询 正向查询 反向查询 ...

  5. Python攻城师的成长————MySQL数据库关键字

    今日学习目标 熟悉关键字用法,掌握多表查询思路 文章目录 今日学习目标 学习内容 一.查询关键字 查询关键字之having过滤 查询关键字之distinct去重 查询关键字之order by排序 查询 ...

  6. Python攻城师的成长————css语法、伪元素选择器(部分)

    今日学习目标 熟悉并掌握css中各种修改属性的方法. 文章目录 今日学习目标 学习内容 一.伪元素选择器 css操作文本内容 选择器优先级 二.css修改属性 css修改文字属性 css修改字体属性 ...

  7. Python攻城师————前端学习(jQuery框架、第三方框架bootstrap框架)

    今日学习目标 继续学习jQuery框架剩余的内容. 文章目录 今日学习目标 学习内容 一.jQuery操作标签 class操作 样式操作 位置操作 文本值操作 属性操作 文档处理操作 二.jQuery ...

  8. Python攻城师————MySQL数据库(自增、外键、关键字)

    今日学习目标 正式学习MySQL数据库语句. 文章目录 今日学习目标 学习内容 一.自增特性 二.约束条件之外键 外键的定义 外键约束创建 三.查询关键字 查询关键字之select与from 查询关键 ...

  9. 如何成为一名优秀的web前端工程师(前端攻城师)

    程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优 ...

最新文章

  1. grep 正则表达式及选项以及注意
  2. mysql如何下载连接到visual_Visual Studio 2015 Community连接到Mysql
  3. JS 点击弹出图片/ 仿QQ商城点击左右滚动幻灯片/ 相册模块,点击弹出图片,并左右滚动幻灯片...
  4. 新版微信对付款码截屏做处理 防止被骗
  5. 分布式存储Ceph 快速安装手册
  6. 搜索不包含关键词_新手教程!百度关键词规划师功能详解
  7. java反射机制详解_Java反射机制详解
  8. 内推学弟进了腾讯,看看他的标杆简历!
  9. (王道408考研数据结构)第八章排序-第四节1:冒泡排序
  10. django中settings中文解释
  11. bandwidth 0.32k 发布,内存带宽测试工具
  12. linux 实时查看日志 最新最后100行 tail
  13. 【MTSP】基于matlab蚁群和粒子群算法求解多旅行商问题【含Matlab code 1156期】
  14. 懒人脚本查看本机IP地址
  15. 免费邮箱客户端设置方法大全
  16. unity 制作的app发布到andriod手机
  17. 做数学建模,学matlab还是python?
  18. Java大象进冰箱线程_把大象装进冰箱:HTTP传输大文件的方法
  19. python linux下载磁力链_Python爬取80s网电影名称及迅雷(磁力)链接
  20. Web前端-React学习

热门文章

  1. 行业动态 | 第一个支持与 ChatGPT 进行面对面聊天的机器人女友
  2. 2020清华深圳研究生院物流工程与管理考研
  3. string转LPCTSTR类型
  4. linux环境下blastn命令怎么用,Linux下BLAST的安装与使用
  5. PHP获取钉钉审批,钉钉调用审批流
  6. OSChina 周一乱弹 —— 有人要给本汪介绍妹子啦
  7. 为ListView添加分段标头
  8. MIT 6.828 (三) Lab 3: User Environments
  9. 【影响人一生发展的关键因素】一命二运三风水,四积阴德五读书,六名七相八敬神,九交贵人十修身
  10. 宝塔7Linux去掉文件夹的锁