首页 > 编程语言 >Python_解决脚本执行过程中,文件被多次读取的问题

Python_解决脚本执行过程中,文件被多次读取的问题

时间:2022-11-12 22:33:07浏览次数:40  
标签:脚本 use return 读取 Python self excel time mock

今天在封装pandas过程中,发现封装脚本的执行耗时明显高于未封装的脚本

复盘问题

import time


class Demo:

    def mock_read_excel(self):
        print("读取文件")
        time.sleep(5)
        return "excel数据"

    def mock_use_1(self):
        self.mock_read_excel()
        return "指标1"

    def mock_use_2(self):
        self.mock_read_excel()
        return "指标2"

    def mock_use_3(self):
        self.mock_read_excel()
        return "指标3"


if __name__ == '__main__':
    start_time = time.time()
    demo = Demo()
    demo.mock_use_1()
    demo.mock_use_2()
    demo.mock_use_3()
    print("耗时", time.time() - start_time)

代码是模拟 读取文件方法被多次调用的情况,执行后,结果如下:

问题原因

每次调用 读取文件方法 都会去读取一次文件,所以导致封装的脚本耗时明显高于未封装的脚本

解决方法

python实例化有个特性,__init__方法中定义的实例属性如果指向的是方法(包括被 property装饰的方法),在实例化时,会执行指向的方法,并将return值赋值给实例属性。

利用该特性 将读取excel的结果赋值给实例属性,多次调用该实例属性也不会再对excel进行读取操作。

import time


class Demo:

    def __init__(self):
        self.excel_info = self.mock_read_excel()

    def mock_read_excel(self):
        print("读取文件")
        time.sleep(5)
        return "excel数据"

    def mock_use_1(self):
        a = self.excel_info
        return "指标1"

    def mock_use_2(self):
        b = self.excel_info
        return "指标2"

    def mock_use_3(self):
        c = self.excel_info
        return "指标3"

通过执行结果可以看出问题得到解决。

总结

对于 执行比较耗时的方法 且方法的返回值是个不变的对象 都可以采用这种方法来解决问题。

 

标签:脚本,use,return,读取,Python,self,excel,time,mock
From: https://www.cnblogs.com/testlearn/p/16884901.html

相关文章

  • Python程序流程控制
    Python程序流程控制1.*程序流程概述在现实生活中,我们看到的流程是多种多样的,如汽车在道路上行驶,要顺序地沿道路前进,碰到交叉路口时,驾驶员就需要判断是转弯还是直行,在环......
  • JSP—El表达式,java脚本,java表达式,jstl标签库
    jsp简介JSP(全称JavaServerPages)是由SunMicrosystems公司倡导和许多公司参与共同创建的一种使软件开发者可以响应客户端请求,而动态生成HTML、XML或其他格式文档的We......
  • 万万没想到,除了香农计划,Python3.11竟还有这么多性能提升!
    众所周知,Python3.11版本带来了较大的性能提升,但是,它具体在哪些方面上得到了优化呢?除了著名的“香农计划”外,它还包含哪些与性能相关的优化呢?本文将带你一探究竟!作者:Bes......
  • 30分钟学完Python基础语法
    30分钟学完Python基础语法,有一门面向对象语言的基础,30分钟足够看一遍Python的基础了。基础语法#缩进取代大括号#用换行取代分号,也可以使用分号,无所谓#输出print();#输......
  • python函数
    一、定义函数下面是一个打印问候语的简单函数,名为greet_user()1、向函数传递信息通过在这里添加username,就可让函数接受你给username指定的任何值。现在,这个函数要......
  • Python字符串操作
    Python字符串操作1.*字符串的常用操作1.*.&访问字符串中的值Python访问子字符串变量,可以使用方括号来截取字符串。与列表的索引一样,字符串索引从0开始。字符串的索引......
  • Python3.8多进程共享内存之Numpy数组
    在利用python处理数据的时候,想要充分发挥CPU的算力,可以选择利用多进程来实现。如果子进程内存占用较大的话,往往很难多开进程,如果不涉及对内存的写入操作,那么多个子进程共享......
  • 2.IPython 的使用技巧
    二.  IPython的使用技巧通过命令来获得帮助文档   1.使用help()#示例help(len)  2.使用?#示例len?  3.shift+tab 查看文档#示例len()......
  • Python2升级Python3改造手法
    Python3.x不兼容Python2.x,但这两个在语法层面差别不大。Python3.x做了部分修改,但大体语法与Python2.x相似,Python3.x的使用者可以轻松阅读Python2.x编写的代码。本节将......
  • Python字典基本操作
    Python字典基本操作与列表和元组有所不同,字典是另一种可变容器模型,且可存储任意类型的对象。下面将学习字典的基本操作。1.*字典常用的基本操作字典的对象使用大括号{}......