广告
返回顶部
首页 > 资讯 > 后端开发 > Python >如何用迭代器设计模式提升Python性能
  • 450
分享到

如何用迭代器设计模式提升Python性能

2023-06-15 19:06:26 450人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容介绍了“如何用迭代器设计模式提升python性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简单案例在开始介绍设计模式之前,我们先

本篇内容介绍了“如何用迭代器设计模式提升python性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

简单案例

在开始介绍设计模式之前,我们先来看一个简单的需求。假设现在我们需要根据传入的变量获取每周的前几天,比如说我们传入3返回的就是[Mon, Tue, Wed],我们传入5返回[Mon, Tue, Wed, Thu, Fri]。这个需求大家应该都能理解,非常非常简单。

如果用一个函数来实现的话,就是这样:

def return_days(n):     week = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']     return week[:n]

你看三行代码就实现了,在这个问题场景当中这样写当然是没有问题。但假如我们把题目稍微变一变,这里的week不是一个固定的数据,而是从上游或者是某个文件当中读取的。这里的n也是一个很大的数,我们把这个函数改写成这样:

def get_data(n):     data = []     for i in range(n):         data.append(get_from_upstream())     return data

我们假设get_from_upstream这个函数当中实现了获取数据的具体逻辑,那么上面这一段函数有一个什么问题?

有些同学会说这没有问题啊,因为像是其他语言实现数据获取的时候也都是这么干的。的确,像是Java等语言可能都是这么干的。但是其他语言这么干没错,不代表Python这么干也没错。因为我们 没有把Python的能力发挥到最大 。

这里有两个问题,第一个问题是 延迟 ,因为前面说了,n是一个很大的数。我们从上游获取数据,无论是通过网络还是文件读取,本质上都是io操作,IO操作的延迟是非常大的。那么我们把这n条数据全部搜集完可能需要很长的时间,导致下游的漫长等待。第二个问题就是内存,因为我们存储了这n条数据一起返回的,如果n很大,对于内存的开销压力也很大,如果机器内存不够很有可能导致崩溃。

那怎么解决呢?

其实解决的方法很简单,如果对迭代器熟悉的话,会发现迭代器针对的恰恰是这两个问题。我们把上面的逻辑改写成迭代器实现即可,这也就是iterator模式。

iterator模式

iterator模式严格说起来其实只是迭代器的一种应用,它非常巧妙地 将迭代器与匿名函数结合在一起 ,里面也没有太多的门道可以说,我们把刚才的代码改写一下,细节都在代码当中。

def get_data(n):     for i in range(n):   yield get_from_upstream()   data_10 = lambda: get_data(10) data_100 = lambda: get_data(100)  # use for d in data_10:     print(d)

很简单吧,但可能你要问了,我们既然写出了get_data这个迭代器,那么我们使用的时候直接for d in get_data(10)这样用不就好了,为什么中间要用匿名函数包一层呢?

道理也很简单,如果这个数据是我们自己使用,当然是没必要中间包一层的。但如果我们是传给下游使用的话,对于下游来说它肯定是不希望考虑上游太多的细节的,越简单越好。所以我们直接丢一个包装好的迭代器过去,下游直接call即可。否则的话,下游还需要感知get_data这个函数传入的参数,显然是不够合理的。

“如何用迭代器设计模式提升Python性能”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何用迭代器设计模式提升Python性能

本文链接: https://www.lsjlt.com/news/281393.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用迭代器设计模式提升Python性能
    本篇内容介绍了“如何用迭代器设计模式提升Python性能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!简单案例在开始介绍设计模式之前,我们先...
    99+
    2023-06-15
  • 如何设计和应用Golang Facade模式提升系统性能
    要设计和应用Golang Facade模式来提升系统性能,可以按照以下步骤进行:1. 确定需要进行性能优化的模块或子系统。分析系统的...
    99+
    2023-10-08
    Golang
  • 如何深入理解Java设计模式的迭代器模式
    如何深入理解Java设计模式的迭代器模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、什么是迭代器模式迭代器模式是针对集合对象而生的,对于集合对象而言,肯定...
    99+
    2023-06-25
  • Python使用设计模式中的责任链模式与迭代器模式的示例
    责任链模式 责任链模式:将能处理请求的对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理请求为止,避免请求的发送者和接收者之间的耦合关系。 #encoding=utf-8 # #by pan...
    99+
    2022-06-04
    模式 示例 迭代
  • Python设计模式中如何使用状态模式实现编辑功能
    Python设计模式中如何使用状态模式实现编辑功能,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。功能介绍新增对象选择,连接线编辑功能。新增对象选择状态表示,连接...
    99+
    2023-06-19
  • PHP7中新增的可选的严格模式:如何提升代码的质量和性能?
    PHP7中新增了可选的严格模式,这一新增功能可以帮助开发者提升代码的质量和性能。本文将通过介绍严格模式的特点和具体使用示例,帮助读者理解如何利用严格模式来提升代码质量和性能。一、严格模式的特点严格模式是PHP7新增的一个特性,它通过一系列的...
    99+
    2023-10-22
    PHP 性能优化 严格模式
  • 如何在 ASP.NET MVC 中使用响应式设计和索引优化来提高性能?
    ASP.NET MVC是一个流行的Web应用程序框架,它提供了一种有效的方式来构建高效的Web应用程序。性能是任何Web应用程序的重要方面之一,因此,在ASP.NET MVC中使用响应式设计和索引优化是非常重要的。这篇文章将介绍如何在ASP...
    99+
    2023-08-11
    索引 响应 spring
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作