Python实现提高运行速度的技巧分享

 更新时间:2023年06月13日 08:53:07   作者:0思必得0  
这篇文章主要为大家详细介绍了Python实现提高运行速度的相关技巧,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以跟随小编一起了解一下

提高Python运行速度(大方向)

现在我们已经知晓如何计算Python代码的运行时间了,接下来就是要想办法提高Python运行速度。一般要提高Python代码的运行速度遵循以下几点:

1.尝试通过多线程运行

多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。

在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。利用多线程技术可以显著提高某些特定的代码运行速度。

现在一般普通的计算机硬件都支持多线程技术,如果一个程序任务可以分解成多线程形式,那么运行速度将会得到极大的提升。
在以后的教程中将会介绍这种技术。

2.优化循环处理

循环处理是编写代码时经常遇到的情况,由于大循环一般会运行上成千上万次以上,于是在循环结构中,每一个小小的代码片段进行优化处理后都将会大大提高代码的运行速度。

后面将会详细介绍一些比较实用且常见的优化小技巧。

3.使用内置模块、函数和数据类型

Python内置的模块和函数是在安装Python时已经定义和安装好的,不仅导入方便,而且运行速度要比个人编写的代码快很多。

速度对比_内置模块

from math import factorial
from time import time
from timeit import timeit
def slow(n=100):
    if n == 0 or n == 1:
        return 1
    else:
        return n * slow(n - 1)
def fast():
factorial(100)
b1 = time()
timeit(slow, number=10_0000)
e1 = time()
print(f'函数 slow 运行 10 万次的时间为:{e1 - b1}')
b2 = time()
timeit(fast, number=10_0000)
e2 = time()
print(f'函数 fast 运行 10 万次的时间为:{e2 - b2}')

函数 slow 运行 10 万次的时间为:1.9230999946594238
函数 fast 运行 10 万次的时间为:0.1594223976135254

速度对比_内置函数

from mdTools import ftDecTimeIt  # 小编自己编写的一个计时装饰器
@ftDecTimeIt(100_0000)
def slow():
    new_list = []
    word_list = ["i", "am", "a", "bad", "boy"]
    for word in word_list:
        new_list.append(word.capitalize())
@ftDecTimeIt(100_0000)
def fast():
    word_list = ["i", "am", "a", "bad", "boy"]
new_list = list(map(str.capitalize, word_list))
slow()
fast()

函数 slow 运行 1000000 次的总耗时为:0.9304 秒
函数 fast 运行 1000000 次的总耗时为:0.8292 秒

速度对比_内置方法

from mdTools import ftDecTimeIt
@ftDecTimeIt(100_0000)
def slow():
    new_list = ""
    word_list = ["i", "am", "a", "bad", "boy"]
    for word in word_list:
        new_list += word.capitalize()
@ftDecTimeIt(100_0000)
def fast():
    word_list = ["i", "am", "a", "bad", "boy"]
new_list = ''.join(word_list)
slow()
fast()

函数 slow 运行 1000000 次的总耗时为:1.0097 秒
函数 fast 运行 1000000 次的总耗时为:0.2878 秒

4.使用较新的Python版本

Python版本是在不停迭代更新的,每次更新都会包含优化内容,这其中不但会优化内置函数、内置方法、更新模块,增加新的语法、模块等,还会优化运行速度,截止目前,最新的Python11某些方便运行速度相较于旧版本更是提升30%左右。

5.使用lru_cache缓存数据

当你可以把需要计算出来的数据保存下来的时候,千万不要重复的去计算它。如果你有一个经常需要使用的函数,而且返回的是可预测的结果,最好是能将其缓存到内存中。后续的函数调用如果是一样的,将立即返回结果。

Python本地库functools中的装饰器:@functools.lru_cache,它就能够缓存函数最近的调用,当缓存的值在特定时间内保持不变的时候这个非常好用,比如递归调用问题。

速度对比_缓存数据

from functools import lru_cache
from time import time
from timeit import timeit
def slow(n=10):
    if n == 1:
        return 1
    if n == 2:
        return 2
    else:
        return slow(n-2) + slow(n-1)
@lru_cache()
def fast(n=10):
    if n == 1:
        return 1
    if n == 2:
        return 2
    else:
        return slow(n - 2) + slow(n - 1)
b1 = time()
timeit(slow, number=10_0000)
e1 = time()
print(f'函数 slow 运行 10 万次的时间为:{e1 - b1}')
b2 = time()
timeit(fast, number=10_0000)
e2 = time()
print(f'函数 fast 运行 10 万次的时间为:{e2 - b2}')

函数 slow 运行 10 万次的时间为:1.344538927078247
函数 fast 运行 10 万次的时间为:0.007016420364379883

6.使用专门的第三方库

们都知道,专业的人做专业的事,因为他们往往比一般人更了解,也更有经验,处理起来也更加得心应手。同样的,在Python编程中,如果有专门的库,那么处理起来也事半功倍,而且效率也高。

速度对比_numba库

numba中提供了jit装饰器,它可以将其装饰的函数JIT编译成机器码函数,并返回一个可在Python中调用机器码的包装对象。

from mdTools import ftDecTimeIt
from numba import jit
@ftDecTimeIt(1)
def slow(x=1, y=1_0000_0000):
    s = 0
    for i in range(x, y):
        s += i
return s
@ftDecTimeIt(1)
@jit
def fast(x=1, y=1_0000_0000):
    s = 0
    for i in range(x, y):
        s += i
return s
slow()
fast()

函数 slow 运行 1 次的总耗时为:5.2450 秒
函数 fast 运行 1 次的总耗时为:0.2750 秒

速度对比_numpy库

果你要处理非常庞大的数据,并且希望能高效的对它们进行计算,那么numpy库是一个非常好的选择。numpy在一些关键代码上使用了C来代替,比原生Python更快处理数组,也能更高效的存储数据。

使用numpy也能更方便也更快的创建出大数据。让我们来看下面的例子:

from mdTools import ftDecTimeIt
import numpy as np
array = np.random.random(1_0000_0000)
@ftDecTimeIt(1)
def slow():
sum(array)
@ftDecTimeIt(1)
def fast():
np.sum(array)
slow()
fast()

函数 slow 运行 1 次的总耗时为:8.1115 秒
函数 fast 运行 1 次的总耗时为:0.1173 秒

到此这篇关于Python实现提高运行速度的技巧分享的文章就介绍到这了,更多相关Python运行速度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python 相对路径报错:"No such file or directory"'原因及解决方法

    Python 相对路径报错:"No such file or 

    如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory",由于python 的相对路径,相对的都是主文件所以会出现Python 相对路径报错,今天小编给大家带来了完美解决方案,感兴趣的朋友一起看看吧
    2023-02-02
  • Pycharm 跳转回之前所在页面的操作

    Pycharm 跳转回之前所在页面的操作

    这篇文章主要介绍了Pycharm 跳转回之前所在页面的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Python常用列表数据结构小结

    Python常用列表数据结构小结

    这篇文章主要介绍了Python常用列表数据结构小结,很有参考借鉴价值,需要的朋友可以参考下
    2014-08-08
  • 使用Python来编写HTTP服务器的超级指南

    使用Python来编写HTTP服务器的超级指南

    这篇文章主要介绍了使用Python来编写HTTP服务器的超级指南,同时介绍了基于Python框架的web服务器的编写方法,译文从理论到实现讲得都很生动详细,十分推荐!需要的朋友可以参考下
    2016-02-02
  • Python爬虫辅助利器PyQuery模块的安装使用攻略

    Python爬虫辅助利器PyQuery模块的安装使用攻略

    这篇文章主要介绍了Python爬虫辅助利器PyQuery模块的安装使用攻略,PyQuery可以方便地用来解析HTML内容,使其成为众多爬虫程序开发者的大爱,需要的朋友可以参考下
    2016-04-04
  • python异常中else的实例用法

    python异常中else的实例用法

    在本篇内容里小编给大家分享的是一篇关于python异常中else的实例用法,有兴趣的朋友们可以跟着学习下。
    2021-06-06
  • django数据库migrate失败的解决方法解析

    django数据库migrate失败的解决方法解析

    这篇文章主要介绍了django数据库migrate失败的解决方法解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • win10下python3.8的PIL库安装过程

    win10下python3.8的PIL库安装过程

    这篇文章主要介绍了win10下python3.8的PIL库安装方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Python数据分析之 Matplotlib 饼图绘制

    Python数据分析之 Matplotlib 饼图绘制

    这篇文章主要介绍了Python数据分析之 Matplotlib 饼图绘制,文章基于python的相关资料展开详细的饼图绘制,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python中的二维列表使用及说明

    Python中的二维列表使用及说明

    这篇文章主要介绍了Python中的二维列表使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12

最新评论