我的编程空间,编程开发者的网络收藏夹
学习永远不晚

提升Python的执行效率的技巧有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

提升Python的执行效率的技巧有哪些

今天小编给大家分享一下提升Python的执行效率的技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

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

# 导入时间提取的time模块from time import timeimport disdef 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_timedef 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_timedef 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_timedef func_2(list_=None):    '''    列表元素转字符串    '''    return ''.join(list_)func_2(list_)# func_2 : 0.000000 秒

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

2、减少循环的使用

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

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

# 初始化循环次数nn = 100000@compute_timedef func_3(n=None):    list_ = []    for m in range(n):        if m % 2 == 0:            list_.append(m)    return list_@compute_timedef 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_timedef func_5(str_=None):    for s in str_:        result = re.search(r'a*[a-z]?c', s)@compute_timedef 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_timedef func_7():    result = mes_1 + mes_2 + mes_3    return result@compute_timedef func_8():    me_1 = 'ss1'    me_2 = 'ss2'    me_3 = 'ss3'    result = me_1 + me_2 + me_3    return resultfunc_7()func_8()# func_7 : 0.000997 秒# func_8 : 0.000000 秒

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

5、使用合理的数据结构

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

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

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

@compute_timedef func_9():    data = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']    print(data[3])@compute_timedef 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的执行效率的技巧有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

提升Python的执行效率的技巧有哪些

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

下载Word文档

猜你喜欢

提升Python的执行效率的技巧有哪些

今天小编给大家分享一下提升Python的执行效率的技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始之前小伙伴先可
2023-07-06

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

python作为使用最广泛的编程语言之一,有着无穷无尽的第三方非标准库的支持。但python有一个经常被人诟病的缺点那就是运行速度,所以本文和大家分享了五个提升Python的执行效率的技巧,希望对大家有所帮助
2023-05-15

javascript可以提升效率的chrome技巧有哪些

这篇“javascript可以提升效率的chrome技巧有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“javascri
2023-07-02

解析提高PHP执行效率的50个技巧分别有哪些

解析提高PHP执行效率的50个技巧分别有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字
2023-06-17

提升前端开发效率的CSS技巧有哪些

今天小编给大家分享一下提升前端开发效率的CSS技巧有哪些的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1. 解决图片5px间
2023-07-05

提高效率的Linux技巧有哪些

这篇文章将为大家详细讲解有关提高效率的Linux技巧有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。命令编辑如果要对一个已输入的命令进行修改,可以使用 ^a(ctrl + a)或 ^e(ctrl +
2023-06-16

PHP除以10000:提升代码执行效率的关键技巧

PHP是一种广泛使用的服务器端脚本语言,用于开发动态网站和Web应用程序。在PHP编程中,优化代码执行效率是至关重要的,可以提高网站的性能和用户体验。本文将重点介绍一个关键的技巧,即将PHP中的除法运算替换为除以10000的位移操作,并提供
PHP除以10000:提升代码执行效率的关键技巧
2024-03-06

Python有哪些高效率技巧

本篇内容主要讲解“Python有哪些高效率技巧”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python有哪些高效率技巧”吧!清理字符串输入清理用户输入的问题,几乎适用于我们可能编写的每个程序。
2023-06-16

提高Linux管理效率的技巧有哪些

这篇文章主要为大家展示了“提高Linux管理效率的技巧有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“提高Linux管理效率的技巧有哪些”这篇文章吧。技巧 1:卸载无响应的 DVD 驱动器网
2023-06-16

高效率的Python编程技巧有哪些

这篇文章主要介绍“高效率的Python编程技巧有哪些”,在日常操作中,相信很多人在高效率的Python编程技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”高效率的Python编程技巧有哪些”的疑惑有所
2023-06-16

提高效率的Java代码小技巧有哪些

提高效率的Java代码小技巧有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改
2023-06-16

Python工作效率提升的方法有哪些

本篇内容主要讲解“Python工作效率提升的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python工作效率提升的方法有哪些”吧!运行外部文件尝试在JupyterNotebook中运
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录