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

一、什么是模块

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

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

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

  3. 包好一组模块的包

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

二、为何要使用模块

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

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

 import time

三、常用模块——collections模块

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

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

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

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

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

 from collections import namedtuple

 Point = namedtuple('point',['x','y'])
p = Point(1,2)
print(p.x,p.y) # 输出:1 2 # 通过nametuple可以用圆心和半径来表示一个圆的面积 Circle = namedtuple('Circle',['a','b','r'])

nametuple

  2.deque和queue:

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

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

 from collections import deque
q = deque(['x','y','z'])
print(q)
q.append('a')
print(q)
q.appendleft('b')
print(q)
q.pop()
print(q)
q.popleft()
print(q) 输出:
deque(['x', 'y', 'z'])
deque(['x', 'y', 'z', 'a'])
deque(['b', 'x', 'y', 'z', 'a'])
deque(['b', 'x', 'y', 'z'])
deque(['x', 'y', 'z'])

deque

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

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

 import queue

 q = queue.Queue()
q.put(['x','y','z'])
q.put(1)
q.put(2)
q.put(3)
print(q)
print(q.qsize())
print(q.get())
print(q.get())
print(q.get())
print(q.get())
print(q.get()) #输出:
<queue.Queue object at 0x000001B9D1B860F0>
4
['x', 'y', 'z']
1
2
3

queue

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

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

 from collections import Counter

 c = Counter('fashjdklfgjsdjfdslasjfasl')
print(c) #输出:
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

 from collections import OrderedDict

 d = dict([('a',1),('b',2),('c',3)])
print(d) od = OrderedDict([('a',1),('b',2),('c',3)])
print(od) # 输出:
{'a': 1, 'b': 2, 'c': 3}
OrderedDict([('a', 1), ('b', 2), ('c', 3)])

OrderDict

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

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

 from collections import OrderedDict

 od = OrderedDict()
od['z'] = 1
od['x'] = 2
od['y'] = 3
print(od)
print(od.keys())
# 输出:
OrderedDict([('z', 1), ('x', 2), ('y', 3)])
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来写应该这样写:

 lst = [11,22,33,44,55,66,77,88,99,90]
my_dict = {}
for value in lst:
# print(value,end=' ')
if value > 66:
if 'k1' not in my_dict:
my_dict['k1'] = []
my_dict['k1'].append(value)
else:
my_dict['k1'].append(value)
else:
if 'k2' not in my_dict:
my_dict['k2'] = []
my_dict['k2'].append(value)
else:
my_dict['k2'].append(value)
print(my_dict) # 输出:{'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. pt-index-usage

    pt-index-usage能够从日志当中分析索引的使用情况,并且生成一个报表.下面看一下基本的语法: pt-index-usage [OPTIONS] [FIILE] 打印报告: pt-index- ...

  2. golang 安装 guru vscode 安装失败

    1.先从git上复制下来 git clone https://github.com/golang/tools 2.再$GOPATH/bin中安装 go install golang.org/x/too ...

  3. RunDll32.exe 详解及[Windows批处理]清除IE缓存

    Rundll32命令详解 文件作用:执行32位DLL文件中的内部函数 位置:X:(当前系统分区)\windows\system32 命令语法: Rundll32.exe DLLname,Functio ...

  4. python IO 文件读写

    IO 由于CPU和内存的速度远远高于外设的速度,所以,在IO编程中,就存在速度严重不匹配的问题. 如要把100M的数据写入磁盘,CPU输出100M的数据只需要0.01秒,可是磁盘要接收这100M数据可 ...

  5. io问题导致的insert缓慢

    生产环境一日常insert在业务量加倍之后非常缓慢,对有问题sql做awr报告和10046trace得出以下结论:In the 10046 trace, the execution of sql el ...

  6. ABAP SICF服务和Java Servlet的比较

    In my opinion ABAP ICF handler and Java Servlet play the same role in enhancement which enables your ...

  7. 全链路实践Spring Cloud 微服务架构

    Spring Cloud 微服务架构全链路实践Spring Cloud 微服务架构全链路实践 阅读目录: 网关请求流程 Eureka 服务治理 Config 配置中心 Hystrix 监控 服务调用链 ...

  8. The Tao to Excellent

    1:一次只做一件事情 我不具备同时做好多件事情的能力. 2:随身携带一本书 效率最高的学习时间是那些零碎的时间. 3:听身体的 休息的标准是:如果你觉得你是在休息,那你就是在休息了. 4:如果有一件事 ...

  9. xalan\xalan\2.7.2\xercesImpl.jar (系统找不到指定的文件)问题

    本文转自:http://blog.csdn.net/lveliu/article/details/77772828 环境搭建为:maven+tomcat tomcat 8.5.2 以上会出现改问题(包 ...

  10. NGSQC toolkit

    一.NGSQCTooklit 使用 主要是去除dapter和低质量的碱基,并有统计结果 可以得到如下的结果 1,每个位置的碱基的平均质量 2,每个GC值对应的reads数 3,每个质量值对应的read ...