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中通过selenium简单操作及元素定位知识点总结

    python中通过selenium简单操作及元素定位知识点总结

    在本篇文章里小编给大家整理的是关于python中通过selenium简单操作及元素定位的知识点,有需要的朋友们可以学习下。
    2019-09-09
  • Win10+GPU版Pytorch1.1安装的安装步骤

    Win10+GPU版Pytorch1.1安装的安装步骤

    这篇文章主要介绍了Win10+GPU版Pytorch1.1安装的安装步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • Python在后台自动解压各种压缩文件的实现方法

    Python在后台自动解压各种压缩文件的实现方法

    这篇文章主要介绍了Python在后台自动解压各种压缩文件的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • python pandas获取csv指定行 列的操作方法

    python pandas获取csv指定行 列的操作方法

    这篇文章主要介绍了pandas获取csv指定行,列的操作方法,本文简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 部署Python的框架下的web app的详细教程

    部署Python的框架下的web app的详细教程

    这篇文章主要介绍了Python部署web app的详细教程,示例代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • 如何查看Python安装了哪些包

    如何查看Python安装了哪些包

    这篇文章主要给大家介绍了关于如何查看Python安装了哪些包的相关资料, Conda是另一种广泛使用的Python包管理工具,它用于安装、管理和升级软件包和其依赖项,需要的朋友可以参考下
    2023-07-07
  • pandas实现excel中的数据透视表和Vlookup函数功能代码

    pandas实现excel中的数据透视表和Vlookup函数功能代码

    今天小编就为大家分享一篇pandas实现excel中的数据透视表和Vlookup函数功能代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Django Rest framework频率原理与限制

    Django Rest framework频率原理与限制

    这篇文章主要介绍了Django Rest framework频率原理与限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 20行python代码的入门级小游戏的详解

    20行python代码的入门级小游戏的详解

    这篇文章主要介绍了python入门级小游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • python使用requests库提交multipart/form-data请求的方法详解

    python使用requests库提交multipart/form-data请求的方法详解

    multipart/form-data的基础是post请求,即基于post请求来实现的 ,下面这篇文章主要给大家介绍了关于python使用requests库提交multipart/form-data请求的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论