年底事多,在公司忙成狗,难得把博客更新了下

本章主要内容是collections模块的介绍(队列,计数器,默认字典,有序字典,可命名元组,以及简单介绍深浅拷贝!)

collections模块

collection counter 计数器:
 
counter 是继承字典这个父类的功能,所以很多方法都是从字典那里得来的。它的功能就是计算每个元素出现的次数
>>> import collections
>>>ret=collections.Counter("asdfkljnklxcjiovjkmq12;3ljh4n34")
>>> print(ret)
Counter({'j': 4, 'k': 3, 'l': 3, 'n': 2, '3': 2, '4': 2, 'f': 1, 'h': 1, 'm': 1,
 'd': 1, 'v': 1, 'a': 1, 'o': 1, 'i': 1, '1': 1, 's': 1, ';': 1, 'x': 1, '2': 1,
 'c': 1, 'q': 1})
obj=collections.Counter([1,2,3,4,5])
>>> obj
Counter({1: 1, 2: 1, 3: 1, 4: 1, 5: 1})
>>> obj.subtract([1,2,10])  #会把不在列表里面的元素进行统计,发现不在一次就-1一次。
>>> obj
Counter({3: 1, 4: 1, 5: 1, 1: 0, 2: 0, 10: -1})
 
 
 
 
默认字典(同样继承字典这个类的属性),通过这个模块,我们可以很方便的在字典里面插入列表,使用列表的方法append元素到列表中:
>>> dic=collections.defaultdict(list)
>>> dic
defaultdict(<class 'list'>, {})
>>> type(dic)
<class 'collections.defaultdict'>
>>> dir(dic)
['__class__', '__contains__', '__copy__', '__delattr__', '__delitem__', '__dir__
', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__
', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
'__missing__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '
__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear
', 'copy', 'default_factory', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popite
m', 'setdefault', 'update', 'values']
>>> dic['k1'].append('jiafa')
>>> dic
defaultdict(<class 'list'>, {'k1': ['jiafa']})
>>> dic
defaultdict(<class 'list'>, {'k1': ['jiafa']})
>>> dic('k2').append('sdfxcv')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'collections.defaultdict' object is not callable
>>> dic['k2'].append('sdfxcv')
>>> dic
defaultdict(<class 'list'>, {'k1': ['jiafa'], 'k2': ['sdfxcv']})
 
 
有序字典(普通字典我们都可以看到字典都是乱序的!):
>>>dicorder=collections.OrderedDict()
>>> dicorder['k1']='v1'
>>> dicorder['k2']='v2'
>>> dicorder['k3']='v3'
>>> dicorder
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
>>> dicorder
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
>>> dicorder
OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
可以看到不管print多少次,字典的顺序总是不会凌乱的!
 
 
 

可命名元组:

>>>mytupleclass=collections.namedtuple("MyTupleClass",['x','y','z'])        #创建一个类,里面的X,Y,Z就等于
>>> obj=mytupleclass(11,22,33)    #创建了一个对象,11=x,22=y,33=z.
>>> obj
MyTupleClass(x=11, y=22, z=33)
>>> obj.x
11
>>> obj.y
22
 
 
 
 

队列:

双向队列:
1 两端同时开工
2 基于线程安全,有线程锁机制。
 
双向队列
>>> import collections
>>> q=collections.deque()
>>> q.append(1)
>>> q.append(2)
>>> q
>>> q.append('asdf')
>>> q
deque([1, 2, 'asdf'])
>>> q.append('1lx')   #同样还有extend的方法,
>>> d.rotate()
>>> d
deque([5, 1, 3, 1, 2, 3, 10, 4])
>>> d.rotate()
>>> d
deque([4, 5, 1, 3, 1, 2, 3, 10])
>>>
>>> q
deque([1, 2, 'asdf', '1lx'])
deque([1, 2])
>>> q.pop()
'1lx'
>>> q
deque([1, 2, 'asdf'])
>>> x=q.pop()
>>> print(x)
asdf
>>> a=[1,2,34,5]
>>> c=a.pop()
>>> print(c)
5
 
 

==========  #   Queue单向队列    ==========

import Queue
myqueue = Queue.Queue(maxsize = 10)

Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

将一个值放入队列中

myqueue.put(10)

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

将一个值从队列中取出

myqueue.get()

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

python queue模块有三种队列:

1、python queue模块的FIFO队列先进先出。
2、LIFO类似于堆。即先进后出。
3、还有一种是优先级队列级别越低越先出来。

针对这三种队列分别有三个构造函数:
1、class Queue.Queue(maxsize) FIFO 
2、class Queue.LifoQueue(maxsize) LIFO 
3、class Queue.PriorityQueue(maxsize) 优先级队列

介绍一下此包中的常用方法:

Queue.qsize() 返回队列的大小 
Queue.empty() 如果队列为空,返回True,反之False 
Queue.full() 如果队列满了,返回True,反之False
Queue.full 与 maxsize 大小对应 
Queue.get([block[, timeout]])获取队列,timeout等待时间 
Queue.get_nowait() 相当Queue.get(False)
非阻塞 Queue.put(item) 写入队列,timeout等待时间 
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
Queue.join() 实际上意味着等到队列为空,再执行别的操作

 
>>> import queue
>>> a=queue.Queue()
>>> a
<queue.Queue object at 0x0000009A888B3A58>
>>> a.put(1)
>>> a.put(2)
>>> a.put(3)
 
>>> a.qsize()
4
>>> a.get()
1
>>> a.get()
1
>>> a.get()
2
>>> a.get()
3
>>> a.qsize()
0
>>> a.get()        #---一直卡在那里,等待队列另一端输入
 
队列的两种进出方式:
1 FIFO(first in first out)。
2 栈,类似于弹夹,后进先出。
 
 
深浅拷贝:
对于字符串和数字来说,深浅拷贝和赋值是没有意义的。因为永远指向内存的同一块地址。
 
字符串,元组列表字典里面的copy方法实际是调用的copy.copy()的方法(浅拷贝)
 
深拷贝:  copy.deepcopy()

python运维开发之路02的更多相关文章

  1. Joker的运维开发之路

    python 1--数据类型,流程控制 2--数据类型详细操作,文件操作,字符编码 https://mp.weixin.qq.com/s/i3lcIP82HdsSr9LzPgkqww 点开更精彩 目前 ...

  2. MySQL运维开发之路

    MySql h1 { color: rgba(0, 60, 128, 1); text-align: center } h1:hover { color: rgba(0, 255, 111, 1) } ...

  3. 战争热诚的python全栈开发之路

    从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链接,一方面是为了自己找的话方便,一方 ...

  4. python运维开发之路第一天

    一.python安装及环境变量配置 1.windows7安装python 1)下载地址:https://www.python.org/downloads/windows/ 如下图: 注意:下载,用代理 ...

  5. python全栈开发之路

    一.Python基础 python简介 python数据类型(数字\字符串\列表) python数据类型(元组\字典) python数据类型(集合) python占位符%s,%d,%r,%f prin ...

  6. JavaScript开发之路02(Sencha Touch使用时常见问题及解决办法)

    1.Sencha中使用组件后通过layout: 'vbox'指定页面布局为垂直盒布局并且组件的高度采用height: '百分比'指定时,组件的背景色通过style: 'background:#F6F6 ...

  7. android开发之路02(浅谈BroadcastReceiver)

    一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: ...

  8. Python 爬虫-进阶开发之路

    第一篇:爬虫基本原理: HTTP, 爬虫基础 第二篇:环境安装与搭建: 第三篇:网页抓取:urllib,requests,aiohttp , selenium,  appium 第四篇:网页解析:re ...

  9. python开发之路:python数据类型(老王版)

    python开发之路:python数据类型 你辞职当了某类似微博的社交网站的底层python开发主管,官还算高. 一次老板让你编写一个登陆的程序.咔嚓,编出来了.执行一看,我的妈,报错? 这次你又让媳 ...

随机推荐

  1. 226 Invert Binary Tree

    /** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = ...

  2. Tensorflow学习笔记4:分布式Tensorflow

    简介 Tensorflow API提供了Cluster.Server以及Supervisor来支持模型的分布式训练. 关于Tensorflow的分布式训练介绍可以参考Distributed Tenso ...

  3. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  4. ubuntu完全卸载nginx

    删除nginx连带配置文件 sudo apt-get purge nginx # Removes everything. 卸载不再需要的nginx依赖程序 sudo apt-get autoremov ...

  5. iOS开发小技巧--TextField的细节处理,键盘中return键的处理

    一.TextField取消自动纠错和设置自身对应键盘的return键盘的样式 二.程序运行过程中,监听return键点击,实现相应操作

  6. 【BZOJ 2555】SubString

    http://www.lydsy.com/JudgeOnline/problem.php?id=2555 一个字符串在原串中的出现次数就是这个字符串对应后缀自动机上的状态的\(|Right|\),要求 ...

  7. DIV+CSS系统学习:转载

    第一部分 HTML 第一章 职业规划和前景 职业方向规划定位: web前端开发工程师 web网站架构师 自己创业 转岗管理或其他 web前端开发的前景展望: 未来IT行业企业需求最多的人才 结合最新的 ...

  8. 我的防Q+

    Q+链接:  http://onemore.web-45.com/index1.html: 兼容IE8: __页面被主机屋收回去了,现在又在弄自己的服务器,稍等呗

  9. 微信扫码支付 php

    仔细看了一遍官方的那幅流程图,我来简化理解一下(注意:我这里针对的是扫码支付模式一,模式二没什么说的)网站后台生成二维码,当然是跟据前台传来的参数有条件的生成买家扫描二维码,扫描过程中,微信后台系统回 ...

  10. 基于@Aspect的AOP配置

    1. Spring 除了支持Schema 方式配置 AOP,还支持注解方式:使用 @Aspect 来配置 2. Spring 默认不支持 @Aspect 风格的切面声明,通过如下配置开启@Aspect ...