当前位置: 首页 > news >正文

单页静态网站怎么做昌平电子网站建设

单页静态网站怎么做,昌平电子网站建设,阿里云虚拟主机如何安装wordpress,淘宝网站建设的目标什么任务 你想定义一个固定尺寸的缓存#xff0c;当它被填满时#xff0c;新加入的元素会覆盖第一个(最老的)元素。这种数据结构在存储日志和历史信息时非常有用。 解决方案 当缓存填满时#xff0c;本节解决方案及时地修改了缓存对象#xff0c;使其从未填满的缓存类变成了…任务 你想定义一个固定尺寸的缓存当它被填满时新加入的元素会覆盖第一个(最老的)元素。这种数据结构在存储日志和历史信息时非常有用。 解决方案 当缓存填满时本节解决方案及时地修改了缓存对象使其从未填满的缓存类变成了填满的缓存类: class RingBuffer(object):这是一个未填满的缓存类 def __init__(self,size_max):self.max size_maxself.data [ ]class __Full(object):这是一个填满了的缓存类 def append(self,x):加入新的元素覆盖最旧的元素self.data[self.cur] xself.cur (self.cur1) % self.maxdef tolist(self):以正确的顺序返回元素列表return self,data[self.cur:] self.data[:self.cur]def append(self,x):在缓存末尾增加一个元素self.data.append(x)if len(self.data) self.max:self.cur 0#永久性地将self的类从非满改成满self.__class__ self.__Fulldef tolist(self):返回一个从最旧的到最新的元素的列表return self.data #用法示例 if __name__ __main__x RingBuffer(5)x.append(1);x.append(2);x.append(3);x.append(4)print x.__class__, x.tolist()x.append(5)print x.__class__, x.tolist()x.append(6)print x.data,x.tolist()x.append(7); x.append(8); x.append(9); x.append(10)print x.data,x.tolist()讨论 缓存环是有固定大小的缓存。当它被填满时加入新元素会覆盖掉它持有的最旧的元素。在存储日志和历史信息时缓存环是非常有用数据结构。Python并没有为这种数据结构提供直接支持但用它构建一个这种结构却轻而易举。本节解决方案专门为元素插入进行了优化。 一个值得注意的设计要点是这些对象在它们的生命周期中会经历某种不可逆转的状态转变——从未填满的缓存变成填满的缓存(从此时开始它的行为方式也发生了变化)我通过修改 self.__class__ 来完成这个转变。这种方式对经典类和新风格类都同样有效只要这些旧的或者新的类的对象都拥有相同的槽(但对两个没有槽的新风格类也有效比如本节的RingBufer和Full类)。注意和其他语言不同虽然Full类的实现位于 RingBufer 类的内部但两者并没有什么特别的联系这样其实很好因为我们完全不需要这种联系。 修改类实例在很多语言中会显得很古怪但在Python中相比于其他一些随意的、无法逆转的、零散的修改方式它是一种很好的选择。而且这样的修改对于所有的类都是可行的。 缓存环(或者叫做有界的队列)是一个很棒的点子但是总测试缓存环有没有被填满是很低效的操作我们也可以找到别的办法但是测试本身就是一件很讨厌的事情。这种讨厌的事情在 Python 世界中是不受欢迎的虽然用Python 来做这些事并没有什么难度而且测试还涉及了更多的内存使用。关键就在于当环被填满时给__class__赋值以改变其行为方式这也是它效率出众的原因:这种类转换是一次性的操作所以它不会带来任何性能上的开销。 另一种选择是我们可以切换实例的两个方法而非整个类来使它变成填满的状态: class RingBuffer(object):def __init__(self,size_max):self.max size_maxself.data[]def _full_append(self,x):self.data[self.cur] xself.cur (self.cur1) % self.maxdef _full_get(self):return self.data[self.cur:] self.data[:self.cur]def append(self,x):self.data.append(x)if len(self.data) self.max:self.cur 0#Permanently change selfs methods from non-full to fullself.appand self._full_appendself.tolist self._full_getdef tolist(self):return self.data这种切换的方式本质上等价于解决方案给出的类切换方式尽管具体机制不同。当需要成组地切换所有的方法时类切换的方式可能是最佳的而方法切换则在需要更细的行为粒度控制的时候更加合适。当需要在新风格类中切换某些特殊方法时类切换是唯一的办法这是因为它固有的特殊方法查询是针对类进行的而不是针对实例的(经典类和新风格类在这个方面截然不同)。 还可以使用其他很多方法来实现缓存环。在Python2.4中可以考虑从新类型collections.deque 派生一个子类这个类型提供了“双头队列”因而从任意一头添加或者删除数据的效率都是相当的: from collections import deque class RingBuffer(deque):def __init__(self,size_max):deque.__init__(self)self.size_max size_maxdef append(self,datum):deque.append(self,datum)if len(self) self.size_max:self.popleft()def tolist(self):return list(self)或者当环处于稳定状态时为了避免if语句还可以混用方法切换: from collections import deque class RingBuffer(deque):def __init__(self,size_max):deque.__init__(self)self.size_max size_maxdef _full_append(self,datum):deque.append(self,datum)self.popleft()def append(self,datum):deque.append(self,datum)if len(self) self.size_max:self.append self._full_appenddef tolist(self):return list(self)在最后的这个实现中我们只需要切换 append 方法(而tolist方法则保持原状)在这里方法切换显得比类切换更方便。
http://www.pierceye.com/news/817181/

相关文章:

  • 那种做任务的网站叫什么wordpress 数据库 旧Ip
  • 制作深圳网站建设百度推广广告收费标准
  • 电影采集网站建设国产做爰全免费的视频网站
  • 集团网站建设特点 助君长春seo公司网站
  • 网站域名备案 更改吗在线做文档的网站
  • 青海网站制作多少钱做网站教程pdf
  • dw做网站背景音乐wordpress 获取当前文章id
  • 上海鹭城建设集团网站icp备案查询
  • 企业站用什么程序做网站深圳手机报价网站
  • 网站开发国外研究状况建设部相关网站
  • 租赁网站开发台州网站优化
  • 网站开发人员工工资网站开发一个支付功能要好多钱
  • 工程建设管理网站源码网站怎样做地理位置定位
  • 太仓公司网站建设电话网络公关名词解释
  • 江门网站建设策划什么是网络营销职能
  • 北京网站托管毕设做网站是不是太low
  • 企业网站建设费用属管理费用吗重庆网站建设制作设计公司哪家好
  • 深圳营销型网站需要多少钱做网站个体户经营范围
  • php 手机网站 上传图片晋州做网站的联系电话
  • 云天下网站建设做抖音seo排名软件是否合法
  • 网站开发合同管辖权异议龙岩网上办事大厅官网
  • 建网站费用明细海口建设网站
  • 网站页面设计说明怎么写影视小程序源码
  • 传媒网站制作网站申请建设
  • 前端做项目的网站新密市城乡建设局网站
  • 网站app建设方案智能外呼系统
  • 创建网站免费注册wordpress 熊掌号代码
  • 的广州建网站的公司黄山市网站建设
  • 做网站外包需要提供什么登录百度账号
  • 网站备案要买备案号西安鑫瀚通网站建设