python学习——常用模块
在学习常用模块时我们应该知道模块和包是什么,关于模块和包会单独写一篇随笔,下面先来了解有关在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学习——常用模块的更多相关文章
- 三、python学习-常用模块
一.常用模块 1.math数学模块 在计算机中,所有数值在计算机底层都是约等于机制,并不是精确地 import math #ceil() 向上取整操作 math.ceil(3.1)=>4 #fl ...
- python的常用模块之collections模块
python的常用模块之collections模块 python全栈开发,模块,collections 认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文 ...
- Python学习--Selenium模块
1. Python学习--Selenium模块介绍(1) 2.Python学习--Selenium模块学习(2) 其他: 1. Python学习--打码平台
- Python学习--Selenium模块学习(2)
Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径2. 通过 `$PATH`环境变量找寻浏览器驱动 可参考Python学习--Selenium模块简单介绍(1) 控制 ...
- Python学习---重点模块的学习【all】
time [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...
- Python学习——python的常用模块
模块:用一堆代码实现了某个功能的代码集合,模块是不带 .py 扩展的另外一个 Python 文件的文件名. 一.time & datetime模块 import time import dat ...
- python(五)常用模块学习
版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明. https://blog.csdn.net/fgf00/article/details/52357 ...
- Python学习【第7篇】:Python之常用模块2
hashlib,configparser,logging模块 一.常用模块二 hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希 ...
- Python学习【第6篇】:Python之常用模块1
常用模块一. collocations 模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二:这些模块和面向对象有关 hashlib模块 configparse模块 ...
随机推荐
- yii2.0里别名的定义
别名用来表示文件路径和URL,为了避免在代码中硬编码一些绝对路径和URL,一个别名必须以‘@’符开头. 用Yii::setAlias()的方法来设置: //文件别名 Yii::setAlias('@f ...
- 表空间常用sql汇总
表空间碎片相关:select tablespace_name, round(sqrt(max(blocks) / sum(blocks)) * (100 / sqr ...
- GO语言(四)线程通信
package main import "fmt" func fibon(c,quit chan int) { x,y := , for { select { case c < ...
- mysql 修改已存在的表增加ID属性为auto_increment自动增长
今天有需要将已经存在表设置自动增长属性 具体如下 alter table customers change id id int not null auto_increment primary key; ...
- Parcel是个好玩意儿
今天学习了一下Parcel打包工具,确实感觉十分简单易上手,基本不需要配置,未来可能是一个主流的打包工具.相比较于Webpack来说,Parcel简直是毫无难度.接下来总结一下我的学习收获. 1 安装 ...
- 如何在Windows中安装GitHub
1.使用Git 在Git官网下载Git安装包,双击开始安装即可.安装完毕之后,在Windows中会具有一个Git Bash命令行工具以及一个Git GUI客户端工具. 点击Download即可下载. ...
- 智能机器人“小昆”的实现(五)MainActivty的实现及项目结束
好了,一切准备工作都完成了,下面我们就可以真正的编写MainActivity了.在MainActivity中,我们要为ListView设定适配器,并为发送按钮设定点击事件.我们的逻辑就是点击发送按钮, ...
- 模式:模版、样式;属于分类、识别的范围;分类、归类的标准-How are patterns obtained?
模式及套路 模式:模版.样式:属于分类.识别的范围. How are patterns obtained? Through : re-use, classification and finally a ...
- Eclipse_java项目中导入外部jar文件
非常多时候,在java项目中须要导入外部 .jar文件.比方:须要导入数据库连接驱动等等一些包.不熟悉eclipse的人可能会犯愁,事实上非常easy. ...过程例如以下: 在须要加入外部文件的项 ...
- BZOJ 1878 [SDOI2009]HH的项链 【莫队】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=1878 1878: [SDOI2009]HH的项链 Time Limit: 4 Sec M ...