python运维开发之路02

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

本章主要内容是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()

时间: 2024-10-04 17:12:16

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

Python自动化运维开发之paramiko(远程批量管理服务器)

一:简介 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.它仅需要在本地上安装相应的软件(python以及PyCrypto),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助. 二:安装方法 安装paramiko有两个先决条件,python和另外一个名为PyCrypto的模块.唯一麻烦的就是安装PyCrypto时,需要GCC库编译,如果没有GCC库会报错,会导致PyCrypto以及paramiko无法安装

PYTHON运维开发面试题整理

1.请使用Linux系统命令统计出establish状态链接数有多少? netstat -an |grep ESTABLISHED |wc -l -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选项-n 拒绝显示别名,能显示数字的全部转化成数字.-l 仅列出有在 Listen (监听) 的服務状态 -p 显示建立相关链接的程序名-r 显示路由信息,路由表-e 显示扩展信息,例如uid等-s 按各个协议进行统计-c 每隔一

python 运维自动化之路 Day2

学习内容: 1.模块初识 2.Pyc是什么 3.Python数据类型 4.数据运算 5.bytes数据类型 6.列表和元组的使用 7.字符串常用操作 8.字典的使用 1.模块初识 如果用 python 解释器来编程,从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了. 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块. 模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py.模块可以被别的程序引入,

python 运维自动化之路 Day3

学习内容: 1.集合 2.文件操作 3.字符转编码操作 4.函数介绍 5.作用域.局部与全局变量 6.递归 7.函数式编程介绍 8.高阶函数 1.集合 集合是Python常用的数据类型,集合也是无序的. 特性:去重复 关系测试 格式:set([]) 去重复,例如: a= set([1,2,2,3,3,4,4,]) #集合具有天生去重复的特性!集合的格式:set([]) print (a) 打印结果: C:\Users\hca006\AppData\Local\Programs\Python\Py

《Python运维开发之路》 装饰器&amp;生成器&amp;迭代器(五)

一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大.装饰器一般接受一个函数对象作为参数,以对其进行增强      说白了:就相当于C++中的构造函数,与析构函数 装饰器本身是一个函数,用于装饰其他函数 装饰器是一个闭包函数是嵌套函数,通过外层函数提供嵌套函数的环境 装饰器在权限控制,增加额外功能如日志,发送邮件用的比较多 1,原函数不带参数的装饰器 假设:我定义了一个函数lyshar

《Python运维开发之路》 内置函数&amp;数据结构(六)

一.Python内置函数详解 Python内置函数图解    您也可以访问(里面有各种例子):https://docs.python.org/3/library/functions.html#next 以下分别举例子演示各种函数的使用  大后天更新,撸起袖子加油干!!! 一.Python常用数据结构 目录: 普通的列表结构 将列表当作堆栈使用 将列表当作队列使用 列表推导式 嵌套列表解析 del语句的使用 元组和序列 集合 字典 一些遍历技巧  大后天更新,撸起袖子加油干!!! 参考文献:htt

android开发之路02(浅谈BroadcastReceiver)

一.BroadcastReceiver (广播接收者)的作用是用来接收来自系统和应用中的广播.应用如下: 1.开机完成后系统会产生一条广播----->接收到这条广播就能实现开机启动服务的功能: 2.网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作: 当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度: Android中的广播机制设计的非常出色,大大减少了开发的工作量和开发周期. 二.静态注册广播接收者和动态注册广播接收者 ①创

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

1.Sencha中使用组件后通过layout: 'vbox'指定页面布局为垂直盒布局并且组件的高度采用height: '百分比'指定时,组件的背景色通过style: 'background:#F6F6F1'时,组件的背景色无法显示,也就是说导致style配置选项失效.解决办法是:将高度设置成整形数值. 2.当某个界面采用layout: 'vbox'并且加了垂直滚动条时,其他组件的高度不能设置成百分比的形式,不然会导致效果失效:

物联网的全栈开发之路

本文由嵌入式企鹅圈原创团队成员-华南师范大学物联网创新中心黄鑫执笔. 两年前我还一直专注在android系统定制领域的研究,对物联网关注比较少,尽管我个人对智能家居的概念和场景体验也比较熟悉.真正引起我注意的是有一次在车上,听到电视广播说打开蓝牙,用手机摇一摇就可以摇到红包,我就觉得这个场景很棒,然后就知道了ibeacon和微信摇一摇周边,知道了微信硬件平台和物联网的发展已经深入渗透到我们的生活了.尽管我觉得自己进入物联网不算早,但是考虑到传统电子行业都有升级到物联的需求,加上自身在嵌入式和AP