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

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

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

五个提升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提升执行效率技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

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

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

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

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

下载Word文档

猜你喜欢

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

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

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

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

使用PHP8提升开发效率的技巧分享

使用PHP8可提升开发效率的技巧:协程和并行:并行执行任务,减少阻塞。模式匹配和枚举:解构数据,提高代码简洁性。Null安全运算符:安全访问属性,减少错误。属性和构造器:简化类变量声明和初始化。目标类型:提高代码可靠性和IDE支持。联合类型和空值合并:增强代码灵活性,减少空检查。匿名类和箭头函数:精简代码,提高可读性。泛型:提升代码可复用性,减少类型检查。JIT编译:优化性能,提高PHP效率。错误处理改进:简化错误抛出和处理,增强代码维护性。
使用PHP8提升开发效率的技巧分享
2024-04-02

Golang开发经验分享:提升开发效率的几个技巧

Golang,一门自 Google 开发的开源编程语言,拥有高效且简洁的语法,以及出色的并发性能,近年来受到越来越多开发者的青睐。在使用 Golang 进行开发的过程中,为了提升开发效率,我们可以使用一些技巧和工具来简化工作流程。本文将分享
Golang开发经验分享:提升开发效率的几个技巧
2023-11-22

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

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

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

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

提高Discuz删除回复效率的技巧分享

在Discuz论坛管理中,删除回复是一项常见且重要的操作。如何提高删除回复的效率,不仅可以节省管理员的时间,也能保持论坛的整洁和秩序。本文将会分享一些提高Discuz删除回复效率的技巧,包含具体的代码示例,帮助管理员们更加高效地管理论坛。
提高Discuz删除回复效率的技巧分享
2024-03-11

分享提升Go语言微服务开发效率的实用技巧

提高效率的Go语言微服务开发实用技巧分享随着互联网的发展,微服务架构在近年来变得越来越流行。作为一种灵活性高、可扩展性强的架构模式,微服务可以帮助开发人员更好地组织和管理复杂的软件系统。而Go语言作为一门简洁、高效、并发性强的编程语言,成
分享提升Go语言微服务开发效率的实用技巧
2024-01-23

提升Python计算效率的技巧与实践秘籍

Python运算符号技巧与实践:提高计算效率的秘籍引言:在Python编程中,对于大多数的任务来说,程序的效率通常不是最重要的考量因素。然而,在处理大规模数据集或计算密集型任务时,优化代码以提高计算效率变得非常重要。Python提供了一些强
提升Python计算效率的技巧与实践秘籍
2023-12-30

Python 字典技巧锦囊:提升代码效率的秘诀

Python 字典是存储和检索数据的强大工具,掌握字典技巧可以显著提升代码效率。本文介绍了十个实用的 Python 字典技巧,涵盖了字典的创建、修改、查找和遍历等方面,帮助您将字典运用得更加得心应手。
Python 字典技巧锦囊:提升代码效率的秘诀
2024-02-22

分享提高工作效率的numpy函数技巧与实例

提高工作效率的numpy函数技巧与实例分享引言:在数据处理和科学计算领域,使用Python的numpy库是非常常见的。numpy提供了一系列强大的函数和工具,能够方便地进行大规模数据操作和计算。本文将介绍一些提高工作效率的numpy函数技
分享提高工作效率的numpy函数技巧与实例
2024-01-26

分享Python实现多继承的技巧和经验,提高开发效率

高效利用Python实现多继承的技巧与经验分享引言:Python是一种强大而灵活的编程语言,其支持多继承的特性使得我们可以更加灵活地设计和组织代码。本文将分享一些关于如何高效利用Python实现多继承的技巧和经验,并提供具体的代码示例。一、
分享Python实现多继承的技巧和经验,提高开发效率
2023-12-30

分享5个Java接口性能提升的通用技巧

作为后端开发人员,我们总是在编写各种API。这些API在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API越来越慢,这时候你就需要考虑如何优化你的API性能了。在这篇文章中,我总结了一些行之有效的API性能优化技巧,希望能给有需要的朋友一些帮助
2023-01-03

编程热搜

  • 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动态编译

目录