zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    static-keys.txt 翻译
    sqlserver sp_executesql 返回值
    socket上传文件
    threadingSocket 服务器端可以同时接受多个客户端的访问
    python ftp上传
    Python sys模块
    linux系统相关
    下载论文,电子书籍(中英文),专利,数据库和课件
    如何设计一个合理、灵活的深度学习训练框架
    使用小米电视的第一天
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/5184747.html
Copyright © 2011-2022 走看看