zoukankan      html  css  js  c++  java
  • cookbook学习第二弹

    1.5怎样实现一个按优先级排序的队列?并且在这个队列上面每次pop操作总是返回优先级最高的那个元素

    带有双下划线的方法,会在需要被调用的位置自动被调用

    带有单下划线的变量是私有变量

     下面利用类heapq模块实现一个简单的优先级队列:

    import heapq

    class PriorityQUeue:

      def __init__(self):

        self._queue = []

        self._index = 0

      def push(self,item,priority):

        heapq.heappush(self._queue,(-priority,self._index,item))

        self._index +=1

      def pop(self):

        return heapq.heappop(self._queue)[-1]

    下面是它的使用方式:

    class Item:

      def __init__(self,name):

        self.name = name

      def __repr__(self):

        return 'Item({!r})'.format(self.name)

    >>>q = PriorityQueue()

    >>>q.push(Item('foo'),1)

    >>>q.push(Item('bar'),5)

    >>>q.push(Item('spam'),4)

    >>>q.push(Item('grok'),1)

    >>>q.pop()

    Item('bar')

    >>> q.pop()
    Item('spam')
    >>> q.pop()
    Item('foo')
    >>> q.pop()
    Item('grok')

    仔细观察可以发现,第一个 pop() 操作返回优先级最高的元素。 另外注意到如果两个有
    着相同优先级的元素( foo 和 grok ),pop操作按照它们被插入到队列的顺序返回的

    __repr__()函数的作用

    str()一般是将数值转成字符串。 
    repr()是将一个对象转成字符串显示,注意只是显示用,有些对象转成字符串没有直接的意思。如list,dict使用str()是无效的,但使用repr可以,这是为了看它们都有哪些值,为了显示之用。 

     

    Python中这个_repr_函数,对应repr(object)这个函数,返回一个可以用来表示对象的可打印字符串:

    1. 尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 ;

    2. 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) ;

    3. 一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。

    代码例子如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    >>> class D(object):
    ...     def __str__(self):
    ...         return "a __str__"
    ...     def __repr__(self):
    ...         return "a __repr__"
    ...
    >>> dr = D()
    >>> print dr
    a __str__
    >>> dr
    a __repr__
    >>> "%s" % dr
    'a __str__'
    >>> "%r" % dr
    'a __repr__'
  • 相关阅读:
    Centos网络时好时超时问题解决
    关于C#异常的处理
    获取Excel工作薄中Sheet页(工作表)名集合
    C# shell32.dll 的用法
    C#将Excel数据表导入SQL数据库的两种方法
    Modbus RTU通信协议详解以及与Modbus TCP通信协议之间的区别和联系
    C# 多线程、异步、同步之间的联系与区别
    在C#中使用Panel控件实现在一个窗体中嵌套另一个窗体
    HslCommunication组件库使用说明
    C#判断dataGridView1 点击的是哪一列上的按钮
  • 原文地址:https://www.cnblogs.com/yingqml/p/6180268.html
Copyright © 2011-2022 走看看