iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >五个提升Python的执行效率的技巧分享
  • 525
分享到

五个提升Python的执行效率的技巧分享

Python提升执行效率技巧Python提升执行效率Python技巧 2023-05-15 08:05:34 525人浏览 泡泡鱼

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

摘要

目录1、合理使用标准或非标准库2、减少循环的使用3、注意重复代码运行4、减少全局变量使用5、使用合理的数据结构python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的

python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的支持。

简单的语法、优雅的代码块使其在各个业务领域都混的风生水起,除了这些优点,Python有一个经常被人诟病的缺点那就是运行速度。

小伙伴通过下面的五个python开发技巧,来充分提高python代码块的运行速度,并且提供了各个python技巧的使用后的运行时间的统计来佐证。

开始之前小伙伴先可以开发一个统计函数运行时间的python装饰器用于后面我们对各个python技巧使用后的时间统计。

# 导入时间提取的time模块
from time import time

import dis


def compute_time(func_):
    '''
    计算函数的运行时间
    '''

    def func_time(*arg, **kw):
        t1 = time()
        result = func_(*arg, **kw)
        t2 = time()
        print(f"{func_.__name__: >10} : {t2 - t1:.6f} 秒")
        return result

    return func_time

上述的compute_time时间计算函数我们开发好了,可以开发一个hello_world函数测试一下使用是否正常。

@compute_time
def hello_world():
    print("hello_world!")


hello_world()

# hello_world!
# hello_world : 0.000000 秒

通过hello_world函数的测试,证明我们的时间装饰器compute_time能够正常统计出函数所运行的时间。

接下来,我们开始正式的介绍下面的五种方式来提高python的运行速度并提供时间运行的结果。

1、合理使用标准或非标准库

在开发过程中绝对不能小看python的标准或非标准库,说实话我们自己有时候写的同样的业务代码块确实是没有大佬们完美。

比如下面这个业务我们需要将一个python列表中的值转换成字符串,首先看看下面的代码块的写法。

# 初始化一个list列表
list_ = ['a', 'b', 'c'] * 10000


@compute_time
def func_1(list_=None):
    '''
    列表元素转字符串函数
    '''
    str_ = ''
    for s in list_:
        str_ = str_ + s
    return str_


func_1(list_)


# func_1 : 0.001999 秒

通过上面的func_1函数的执行情况使用自己写的传统的方式来转换步骤比较繁杂,并且花费了0.001999 秒的时间。

@compute_time
def func_2(list_=None):
    '''
    列表元素转字符串
    '''
    return ''.join(list_)


func_2(list_)

# func_2 : 0.000000 秒

相比func_1函数的运行时间,func_2运行的时间几乎可以忽略不计,六位数的小数根本看不出来变化。

2、减少循环的使用

从平常开发的过程中其实已经发现,使用列表推导式、迭代式等的可序列化数据处理方式要比for循环更加的便捷、高效。

下面我们同样可以通过一个例子来说明问题,比如我们需要挑选出一个list列表中可以被2整除的数。

# 初始化循环次数n
n = 100000


@compute_time
def func_3(n=None):
    list_ = []
    for m in range(n):
        if m % 2 == 0:
            list_.append(m)
    return list_


@compute_time
def func_4(n=None):
    return [m for m in range(n) if m % 2 == 0]


func_3(n)

func_4(n)

# func_3 : 0.004986 秒
# func_4 : 0.003014 秒

通过func_3函数、func_4函数的比较,首先func_4的方式比func_3精简了许多。

并且时间上func_4使用列表推导式的方式比普通的for循环运行速度上快了1/4的时间。

3、注意重复代码运行

关于代码的重复运行这个在我们通常的开发方式中都能体会到,也就是本可以作为公共代码块运行一次就可以。

可以却将能够公共使用的代码块加入到了循环当中,这样只会影响代码块的执行效率。

比如我们需要使用python的re模块去搜索字符串中的某一些元素,下面通过两种方式来比较时间结果。

# 导入正则表达式匹配模块
import re


@compute_time
def func_5(str_=None):
    for s in str_:
        result = re.search(r'a*[a-z]?c', s)


@compute_time
def func_6(str_=None):
    repx = re.compile(r'a*[a-z]?c')
    for s in str_:
        result = repx.search(s)


func_5('abcdefg1234oks' * 1000)

func_6('abcdefg1234oks' * 1000)

# func_5 : 0.006999 秒
# func_6 : 0.002000 秒

对比func_5和func_6的业务实现方式,我们将re模块的compile正则匹配对象直接放到for循环的外层,运行时间直接就减少了3倍不止。

是因为在循环中直接使用search匹配正则对象,会在循环中不断地创建正则匹配对象,这样就
增加了for循环的处理负担,导致速度变慢。

4、减少全局变量使用

在说明这一点的时候,我们要明白全局变量在程序运行的过程中是一直存在的不会消失。

全局变量太多就会导致运行期间占用的内存太大,相比全局变量使用局部变量就会变得更加的高效。

下面我们通过两种方式的使用实例,来对比全局变量和局部变量的运行时间。

mes_1 = 'ss1'

mes_2 = 'ss2'

mes_3 = 'ss3'


@compute_time
def func_7():
    result = mes_1 + mes_2 + mes_3
    return result


@compute_time
def func_8():
    me_1 = 'ss1'
    me_2 = 'ss2'
    me_3 = 'ss3'
    result = me_1 + me_2 + me_3
    return result


func_7()

func_8()


# func_7 : 0.000997 秒
# func_8 : 0.000000 秒

上面我们做了一个普通的加法计算已经说明了问题,func_8函数使用局部变量的方式确实速度更快。

5、使用合理的数据结构

在大多数的python开发过程中,想必很多人都是为了方便更多的时候使用的是list列表的方式来处理数据。

Python 有四种内置的数据结构:列表、元组、集合、字典,在合适的业务场景中使用合适的数据结构来处理数据同样能提高计算的执行效率。

比如:下面我们将从一个list列表和tuple元组来提取对应索引位置上面的值。

@compute_time
def func_9():
    data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
    print(data[3])


@compute_time
def func_10():
    data = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h')
    print(data[3])

func_9()

func_10()

# func_9 : 0.000000 秒
# func_10 : 0.000000 秒

通过执行func_9和func_10函数,我们发现时间上两者的差距不大,起码在六位小数之内是分辨不出结果的。

print('func_9汇编产生的机器码:')
dis.dis(func_9)

print('func_10汇编产生的机器码:')
dis.dis(func_10)

最后,我们分别查看了func_9和func_10的汇编机器码,发现明显list列表处理产生的机器码更多。

# func_9汇编产生的机器码:
#  30           0 LOAD_GLOBAL              0 (time)
#               2 CALL_FUNCTioN            0
#               4 STORE_FAST               2 (t1)
#
#  31           6 LOAD_DEREF               0 (func_)
#               8 LOAD_FAST                0 (arg)
#              10 LOAD_FAST                1 (kw)
#              12 CALL_FUNCTION_EX         1
#              14 STORE_FAST               3 (result)
#
#  32          16 LOAD_GLOBAL              0 (time)
#              18 CALL_FUNCTION            0
#              20 STORE_FAST               4 (t2)
#
#  33          22 LOAD_GLOBAL              1 (print)
#              24 LOAD_DEREF               0 (func_)
#              26 LOAD_ATTR                2 (__name__)
#              28 LOAD_CONST               1 (' >10')
#              30 FORMAT_VALUE             4 (with format)
#              32 LOAD_CONST               2 (' : ')
#              34 LOAD_FAST                4 (t2)
#              36 LOAD_FAST                2 (t1)
#              38 BINARY_SUBTRACT
#              40 LOAD_CONST               3 ('.6f')
#              42 FORMAT_VALUE             4 (with format)
#              44 LOAD_CONST               4 (' 秒')
#              46 BUILD_STRING             4
#              48 CALL_FUNCTION            1
#              50 POP_TOP
#
#  34          52 LOAD_FAST                3 (result)
#              54 RETURN_VALUE
# func_10汇编产生的机器码:
#  30           0 LOAD_GLOBAL              0 (time)
#               2 CALL_FUNCTION            0
#               4 STORE_FAST               2 (t1)
#
#  31           6 LOAD_DEREF               0 (func_)
#               8 LOAD_FAST                0 (arg)
#              10 LOAD_FAST                1 (kw)
#              12 CALL_FUNCTION_EX         1
#              14 STORE_FAST               3 (result)

到此这篇关于五个提升Python的执行效率的技巧分享的文章就介绍到这了,更多相关Python提升执行效率技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 五个提升Python的执行效率的技巧分享

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

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

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

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

下载Word文档
猜你喜欢
  • 五个提升Python的执行效率的技巧分享
    目录1、合理使用标准或非标准库2、减少循环的使用3、注意重复代码运行4、减少全局变量使用5、使用合理的数据结构python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的...
    99+
    2023-05-15
    Python提升执行效率技巧 Python提升执行效率 Python 技巧
  • 提升Python的执行效率的技巧有哪些
    今天小编给大家分享一下提升Python的执行效率的技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始之前小伙伴先可...
    99+
    2023-07-06
  • Golang开发经验分享:提升开发效率的几个技巧
    Golang,一门自 Google 开发的开源编程语言,拥有高效且简洁的语法,以及出色的并发性能,近年来受到越来越多开发者的青睐。在使用 Golang 进行开发的过程中,为了提升开发效率,我们可以使用一些技巧和工具来简化工作流程。本文将分享...
    99+
    2023-11-22
    并发编程 错误处理 编译优化
  • 分享PyCharm配置技巧:提升编程效率
    PyCharm是一款功能强大的集成开发环境,为Python程序员提供了便捷的开发工具。在使用PyCharm进行开发时,合理配置环境可以提高工作效率,让编程变得更加顺畅。本文将分享一些P...
    99+
    2024-02-26
    pycharm 环境配置 技巧分享 python程序
  • 17条提高工作效率的Python技巧分享
    目录1.引言2.技巧总结2.1.处理用户的多个输入2.2.处理多个条件语句2.3.判断数字奇偶性2.4.交换变量2.5.反转字符串2.6.判断字符串是否为回文串2.7.尽量使用 In...
    99+
    2024-04-02
  • PHP除以10000:提升代码执行效率的关键技巧
    PHP是一种广泛使用的服务器端脚本语言,用于开发动态网站和Web应用程序。在PHP编程中,优化代码执行效率是至关重要的,可以提高网站的性能和用户体验。本文将重点介绍一个关键的技巧,即将...
    99+
    2024-03-06
    代码执行效率
  • 解析提高PHP执行效率的50个技巧分别有哪些
    解析提高PHP执行效率的50个技巧分别有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串...
    99+
    2023-06-17
  • Go语言提升开发效率的语法糖技巧分享
    目录前言可变长参数声明不定长数组init函数忽略导包忽略字段json序列化忽略某个字段json序列化忽略空值字段短变量声明类型断言切片循环判断map的key是否存在select控制结...
    99+
    2024-04-02
  • 提升Golang开发效率:异步编程技巧分享
    标题:提升Golang开发效率:异步编程技巧分享 随着互联网技术的不断发展,对于高效的并发编程需求也越来越强烈。在Golang这门现代化的编程语言中,异步编程是提高开发效率的重要手段之...
    99+
    2024-02-28
    并发编程 异步编程 golang效率 并发访问 golang开发
  • Task提高异步执行效率技巧
    async Task 语法糖出来后,异步编程变得非常简单,适合需要耗费较长时间的任务。 有些小伙伴使用后可能会非常疑惑,使用异步和同步,在耗时上几乎没有差别。 下面我们看一个例子,场...
    99+
    2024-04-02
  • 提升效率3个工具分享
    俗话说,磨刀不误砍柴工,一个好的工具往往会帮助我们提高工作效率。 关于日常效率管理,想分享几个常用的免费工具,平时也一直在使用,感觉非常不错。 1. EverNote 每天都在使用的工具,相比OneNote,没有那么华丽的画面和效果,但是作...
    99+
    2023-01-31
    效率 工具
  • 提高Discuz删除回复效率的技巧分享
    在Discuz论坛管理中,删除回复是一项常见且重要的操作。如何提高删除回复的效率,不仅可以节省管理员的时间,也能保持论坛的整洁和秩序。本文将会分享一些提高Discuz删除回复效率的技巧...
    99+
    2024-03-11
    自动化 性能优化 数据删除
  • 分享提升Go语言微服务开发效率的实用技巧
    提高效率的Go语言微服务开发实用技巧分享 随着互联网的发展,微服务架构在近年来变得越来越流行。作为一种灵活性高、可扩展性强的架构模式,微服务可以帮助开发人员更好地组织和管理复杂的软件系统。而Go语言作为一门简...
    99+
    2024-01-23
    Go语言 微服务 提高效率
  • DedeCMS栏目修改技巧分享:提升网站管理效率
    DedeCMS栏目修改技巧分享:提升网站管理效率,需要具体代码示例 随着互联网技术的不断发展,网站建设越来越受到重视,而网站的内容管理系统也变得愈发重要。DedeCMS作为国内知名的内...
    99+
    2024-03-15
    dedecms 技巧分享 栏目修改
  • 提升效率:PyCharm快速导入第三方库技巧分享
    提升效率:PyCharm快速导入第三方库技巧分享 Python 是一种广泛应用的编程语言,由于其强大的第三方库支持,使得Python成为了许多开发者的首选。在Python开发过程中,我...
    99+
    2024-02-22
    pycharm 第三方 导入
  • 20个JS简写技巧提升工作效率
    目录当同时声明多个变量时,可简写成一行 利用解构,可为多个变量同时赋值 巧用三元运算符简化if else 使用||运算符给变量指定默认值 使用&&运算符简化if语句 ...
    99+
    2024-04-02
  • 提升开发效率的Java命令行技巧有哪些
    本篇内容主要讲解“提升开发效率的Java命令行技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“提升开发效率的Java命令行技巧有哪些”吧!Mac 环境z...
    99+
    2024-04-02
  • 提升Python计算效率的技巧与实践秘籍
    Python运算符号技巧与实践:提高计算效率的秘籍引言:在Python编程中,对于大多数的任务来说,程序的效率通常不是最重要的考量因素。然而,在处理大规模数据集或计算密集型任务时,优化代码以提高计算效率变得非常重要。Python提供了一些强...
    99+
    2023-12-30
    Python 技巧 运算符号
  • 分享Spring Cloud OpenFeign 的五个优化技巧
    目录一、超时优化1、设置Ribbon超时时间2、设置OpenFeign超时时间二、请求连接优化1、引入Apache HttpClient依赖2、开启Apache HttpClient...
    99+
    2024-04-02
  • 分享3个简单的Python代码高效运行技巧
    目录1. 引言2. 获取字典的值3. 循环中使用enumerate4. 使用f-strings来拼接和打印字符串5. 总结1. 引言 小伙伴们日常工作中都必不可少地使用Python实...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作