在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在python中的几个常用模块。

一、什么是模块

  常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。但其实import加载的模块分为四个通用类别: 

  1. 使用python编写的代码(.py文件)

  2.已被编译为共享库或DLL的C或C++扩展

  3. 包好一组模块的包

  4. 使用C编写并链接到python解释器的内置模块

二、为何要使用模块

    如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用。

  在程序开始的地方可以通过 import 这个关键字来导入模块

  1. import time

三、常用模块——collections模块

  在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等

  1.namedtuple: 生成可以使用名字来访问元素内容的tuple

    我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

  1. t1 = (1,2)
  2. t2 = (3,4)

  但是,看到(1, 2),(3,4),你很难看出这个tuple是用来表示一个坐标的。这时,namedtuple就派上了用场:

  1. from collections import namedtuple
  2.  
  3. Point = namedtuple('point',['x','y'])
  4. p = Point(1,2)
  5. print(p.x,p.y)
  6.  
  7. # 输出:1 2
  8.  
  9. # 通过nametuple可以用圆心和半径来表示一个圆的面积
  10.  
  11. Circle = namedtuple('Circle',['a','b','r'])

nametuple

  2.deque和queue:

    deque: 双端队列,可以快速的从两端追加和推出对象    

    使用list存储数据时,按索引访问元素很快,但是如果列表的元素很多的时候插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低(因为插入和删除元素的时候都会导        致元素的下标向后和向前移动)。deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈,deque除了实现list的append()pop()外,还支持appendleft()popleft(),这样就可以非常高效地往头部添加或删除元素:

  1. from collections import deque
  2. q = deque(['x','y','z'])
  3. print(q)
  4. q.append('a')
  5. print(q)
  6. q.appendleft('b')
  7. print(q)
  8. q.pop()
  9. print(q)
  10. q.popleft()
  11. print(q)
  12.  
  13. 输出:
  14. deque(['x', 'y', 'z'])
  15. deque(['x', 'y', 'z', 'a'])
  16. deque(['b', 'x', 'y', 'z', 'a'])
  17. deque(['b', 'x', 'y', 'z'])
  18. deque(['x', 'y', 'z'])

deque

  deque中的相关方法和list中的方法有很多相似的地方,在这儿就不多说了

  queue:和数据结构里面的队列一样,但只能从queue的一端进行修改

  1. import queue
  2.  
  3. q = queue.Queue()
  4. q.put(['x','y','z'])
  5. q.put(1)
  6. q.put(2)
  7. q.put(3)
  8. print(q)
  9. print(q.qsize())
  10. print(q.get())
  11. print(q.get())
  12. print(q.get())
  13. print(q.get())
  14. print(q.get())
  15.  
  16. #输出:
  17. <queue.Queue object at 0x000001B9D1B860F0>
  18. 4
  19. ['x', 'y', 'z']
  20. 1
  21. 2
  22. 3

queue

  所有可以看出queue的FIFO(先进先出)的性质,而deque和queue有个明显的区别就是queue保密性更加好,在deque中如果我们打印deque时我们能看见deque中的每个元素,但是queue就不能看出来,而是返回一个queue对象。

  3.Counter: 计数器,主要用来计数 ,Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

  1. from collections import Counter
  2.  
  3. c = Counter('fashjdklfgjsdjfdslasjfasl')
  4. print(c)
  5.  
  6. #输出:
  7. Counter({'s': 5, 'f': 4, 'j': 4, 'a': 3, 'd': 3, 'l': 3, 'h': 1, 'k': 1, 'g': 1})

Counter

  4.OrderedDict: 有序字典

  使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。如果要保持Key的顺序,可以用 OrderedDict

  1. from collections import OrderedDict
  2.  
  3. d = dict([('a',1),('b',2),('c',3)])
  4. print(d)
  5.  
  6. od = OrderedDict([('a',1),('b',2),('c',3)])
  7. print(od)
  8.  
  9. # 输出:
  10. {'a': 1, 'b': 2, 'c': 3}
  11. OrderedDict([('a', 1), ('b', 2), ('c', 3)])

OrderDict

  由于PyCharm的原因,每次打印的dict都是一样的,但是dict的Key确实是无序的。二变成OrderDict时就是有序的了。

  注意,OrderedDict的Key会按照插入的顺序排列,不是Key本身排序:

  1. from collections import OrderedDict
  2.  
  3. od = OrderedDict()
  4. od['z'] = 1
  5. od['x'] = 2
  6. od['y'] = 3
  7. print(od)
  8. print(od.keys())
  9. # 输出:
  10. OrderedDict([('z', 1), ('x', 2), ('y', 3)])
  11. odict_keys(['z', 'x', 'y'])

OrderDict的keys

  5.defaultdict: 带有默认值的字典

  有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

  即: {'k1': 大于66 'k2': 小于66} 若用dict来写应该这样写:

  1. lst = [11,22,33,44,55,66,77,88,99,90]
  2. my_dict = {}
  3. for value in lst:
  4. # print(value,end=' ')
  5. if value > 66:
  6. if 'k1' not in my_dict:
  7. my_dict['k1'] = []
  8. my_dict['k1'].append(value)
  9. else:
  10. my_dict['k1'].append(value)
  11. else:
  12. if 'k2' not in my_dict:
  13. my_dict['k2'] = []
  14. my_dict['k2'].append(value)
  15. else:
  16. my_dict['k2'].append(value)
  17. print(my_dict)
  18.  
  19. # 输出:{'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]}

dict来解决

  而用defaultdict是这样的。

python学习——常用模块的更多相关文章

  1. 三、python学习-常用模块

    一.常用模块 1.math数学模块 在计算机中,所有数值在计算机底层都是约等于机制,并不是精确地 import math #ceil() 向上取整操作 math.ceil(3.1)=>4 #fl ...

  2. python的常用模块之collections模块

    python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块?    常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...

  3. Python学习--Selenium模块

    1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台

  4. Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...

  5. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  6. Python学习——python的常用模块

    模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...

  7. python(五)常用模块学习

    版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...

  8. Python学习【第7篇】:Python之常用模块2

    hashlib,configparser,logging模块 一.常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希 ...

  9. Python学习【第6篇】:Python之常用模块1

    常用模块一. collocations 模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二:这些模块和面向对象有关 hashlib模块 configparse模块 ...

随机推荐

  1. 【Leetcode】【Medium】Subsets

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  2. 为某个云服务设置RVIP

    获取所有Azure(云)服务Get-AzureService #查看某个云服务的LocationGet-AzureService -ServiceName tests |select location ...

  3. Linux入门-2 VIM基础

    启动与退出 模式 进入插入模式 命令 删除.复制.粘贴 光标控制 查找与替换 EX模式 启动与退出 vim只启动vim vim <filename>打开文件,如果不存在则新建 模式 Nor ...

  4. html5shiv.js和respond.js引入不起作用解决

    当项目需求需要兼容ie7,8这些奇葩浏览器时,考虑到h5的便捷性及响应式,我们往往引入html5shiv.js和respond.js来让ie7,8兼容h5及一些响应式变化,引入时就需要用到条件注释,原 ...

  5. Linux:CentOS7卸载mysql

    步骤 方法一. 1.查看mysql安装 rpm -qa|grep -i mysql 2.卸载前关闭mysql服务 rpm -ev --nodeps mysql-community-release-el ...

  6. RBTree和AVL

      红黑树和AVL的相同:都是平衡二叉树,所以插入删除修改查询都非常高效. 红黑树和AVL的区别: 红黑树:  不是要求绝对平衡,付出的代价是要着色,查询次数可能会多一层,好处是减少旋转次数. AVL ...

  7. 用python自建一个DNS服务器

    前段日子一直在做公司的DNS调度程序,不过由于性能比较差,方案最终废弃掉了.两个半月心血,不想白白浪费掉,于是改了改,把商业秘密相关的部分去掉,变成了一个公共的DNS服务器.其实说的简单点,就是一个可 ...

  8. 10、SpringBoot-CRUD登陆拦截

    1.前端页面的设置 index.html <input type="text" class="form-control" name="usern ...

  9. 安装JDK8

    安装JDK8 1.去http://www.Oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html中下载JDK的 ...

  10. ICT测试点是干什么的, 怎么设置!

    简单理解:ICT类似如万用表,只是把表笔换成了测试针.那么问题就简单了,一颗普通的RLC元件,都必须有两个测试点才能够测试,当然同一个网络共用的节点用一个测试点就可以了. 详细描述: PCB设计时要看 ...