5个小技巧提升Python运行速度

高通SDX35平台 modem启动异常分析 SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。 阅读详情

Python 是世界上使用最广泛的编程语言之一,但在速度上还有一个非常大的缺点。好在可以通过一些小技巧提升运行速度!

Python 是世界上使用最广泛的编程语言之一。它是一种解释型高级通用编程语言,具有广泛的用途,几乎可以将其用于所有事物。其以简单的语法、优雅的代码和丰富的第三方库而闻名。python除了有很多优点外,但在速度上还有一个非常大的缺点。

虽然Python代码运行缓慢,但可以通过下面分享的5个小技巧提升Python运行速度!

首先,定义一个计时函数timeshow,通过简单的装饰,可以打印指定函数的运行时间。

这个函数在下面的例子中会被多次使用。

def timeshow(func):
    from time import time
    def newfunc(*arg, **kw):
        t1 = time()
        res = func(*arg, **kw)
        t2 = time()
        print(f"{func.__name__: >10} : {t2-t1:.6f} sec")
        return res
    return newfunc

@timeshow
def test_it():
    print("hello pytip")

test_it()

1. 选择合适的数据结构

使用正确的数据结构对python脚本的运行时间有显着影响。Python 有四种内置的数据结构:

  • 列表: List
  • 元组: Tuple
  • 集合: Set
  • 字典: Dictionary

但是,大多数开发人员在所有情况下都使用列表。这是不正确的做法,应该根据任务使用合适数据结构。

运行下面的代码,可以看到元组执行简单检索操作的速度比列表快。其中dis模块反汇编了一个函数的字节码,这有利于查看列表和元组之间的区别。

import dis
def a():
    data = [1, 2, 3, 4, 5,6,7,8,9,10]
    x =data[5]
    return x
def b():
    data = (1, 2, 3, 4, 5,6,7,8,9,10)
    x =data[5]
    return x

print("-----:使用列表的机器码:------")
dis.dis(a)
print("-----:使用元组的机器码:------")
dis.dis(b)

运行输出:

    -----:使用列表的机器码:------
      3           0 LOAD_CONST               1 (1)
                  2 LOAD_CONST               2 (2)
                  4 LOAD_CONST               3 (3)
                  6 LOAD_CONST               4 (4)
                  8 LOAD_CONST               5 (5)
                 10 LOAD_CONST               6 (6)
                 12 LOAD_CONST               7 (7)
                 14 LOAD_CONST               8 (8)
                 16 LOAD_CONST               9 (9)
                 18 LOAD_CONST              10 (10)
                 20 BUILD_LIST              10
                 22 STORE_FAST               0 (data)
    
      4          24 LOAD_FAST                0 (data)
                 26 LOAD_CONST               5 (5)
                 28 BINARY_SUBSCR
                 30 STORE_FAST               1 (x)
    
      5          32 LOAD_FAST                1 (x)
                 34 RETURN_VALUE
    -----:使用元组的机器码:------
      7           0 LOAD_CONST               1 ((1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
                  2 STORE_FAST               0 (data)
    
      8           4 LOAD_FAST                0 (data)
                  6 LOAD_CONST               2 (5)
                  8 BINARY_SUBSCR
                 10 STORE_FAST               1 (x)
    
      9          12 LOAD_FAST                1 (x)
                 14 RETURN_VALUE

看下列表的机器码,冗长而多余!

2. 善用强大的内置函数和第三方库

如果你正在使用python并且仍在自己编写一些通用函数(比如加法、减法),那么是在侮辱python。Python有大量的库和内置函数来帮助你不用编写这些函数。如果研究下,那么你会惊奇地发现几乎90%的问题已经有第三方包或内置函数来解决。

可以通过访问官方文档查看所有内置函数。你也可以在wiki python上找到更多使用内置函数的场景。

比如,现在我们想合并列表中的所有单词为一个句子,比较法自己编写和调用库函数的区别:

# ❌ 正常人能想到的方法
@timeshow
def f1(list):
    s =""
    for substring in list:
        s += substring
    return s

# ✅ pythonic 的方法
@timeshow
def f2(list):
    s = "".join(list)
    return s


l = ["I", "Love", "Python"] * 1000 # 为了看到差异,我们把这个列表放大了
f1(l)
f2(l)

运行输出:

        f1 : 0.000227 sec
        f2 : 0.000031 sec

3. 少用循环

  • 用 列表推导式 代替循环
  • 用 迭代器 代替循环
  • 用 filter() 代替循环
  • 减少循环次数,精确控制,不浪费CPU
## 返回n以内的可以被7整除的所有数字。

# ❌ 正常人能想到的方法:
@timeshow
def f_loop(n): 
    L=[]
    for i in range(n):
        if i % 7 ==0:
            L.append(i)
    return L


#  ✅ 列表推导式
@timeshow
def f_list(n):
    L = [i for i in range(n) if i % 7 == 0]
    return L

# ✅  迭代器
@timeshow
def f_iter(n):
    L = (i for i in range(n) if i % 7 == 0)
    return L

# ✅ 过滤器 
@timeshow
def f_filter(n):
    L = filter(lambda x: x % 7 == 0, range(n))
    return L

# ✅ 精确控制循环次数 
@timeshow
def f_mind(n):
    L = (i*7 for i in range(n//7))
    return L

n = 1_000_000
f_loop(n)
f_list(n)
f_iter(n)
f_filter(n)
f_mind(n)

输出为:

    f_loop : 0.083017 sec
    f_list : 0.056110 sec
    f_iter : 0.000015 sec
  f_filter : 0.000003 sec
    f_mind : 0.000002 sec

谁快谁慢,一眼便知!

filter 配合lambda大法就是屌!!!

4. 避免循环重复计算

如果你有一个迭代器,必须用它的元素做一些耗时计算,比如匹配正则表达式。你应该将正则表达式模式定义在循环之外,因为最好只编译一次模式,而不是在循环的每次迭代中一次又一次地编译它。

只要有可能,就应该尝试在循环外进行尽可能多的运算,比如将函数计算分配给局部变量,然后在函数中使用它。

# ❌ 应改避免的方式:
@timeshow
def f_more(s):
    import re
    for i in s:
        m = re.search(r'a*[a-z]?c', i)


# ✅ 更好的方式:
@timeshow
def f_less(s):
    import re
    regex = re.compile(r'a*[a-z]?c')
    for i in s:
        m = regex.search(i)
s = ["abctestabc"] * 1_000
f_more(s)
f_less(s)

输出为:

    f_more : 0.001068 sec
    f_less : 0.000365 sec

5. 少用内存、少用全局变量

内存占用是指程序运行时使用的内存量。为了让Python代码运行得更快,应该减少程序的内存使用量,即尽量减少变量或对象的数量。

Python 访问局部变量比全局变量更有效。在有必要之前,应该始终尝试忽略声明全局变量。一个在程序中定义过的全局变量会一直存在,直到整个程序编译完成,所以它一直占据着内存空间。另一方面,局部变量访问更快,且函数完成后即可回收。因此,使用多个局部变量比使用全局变量会更好。

# ❌ 应该避免的方式:

message = "Line1\n"
message += "Line2\n"
message += "Line3\n"

# ✅ 更好的方式:

l = ["Line1","Line2","Line3"]
message = '\n'.join(l)


# ❌ 应该避免的方式:

x = 5
y = 6 
def add():
    return x+y
add()

# ✅ 更好的方式:

def add():
    x = 5
    y = 6
    return x+y
add()

小节

以上就是我们分享的5个加速python运行的小技巧,希望对你有用!

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

网络速度的极致:800G & 1.6T 以太网的突破! 你好,这里是网络技术联盟站。在我们进入数据驱动的世界时,以太网的重要性日益突出。从根本上说,以太网是一种连接计算机的技术,旨在形成一个本地网,通过它,设备可以与其他设备进行通信。然而,随着时间的推移,以太网已经发展成为一种全球的数据通信系统,其速度从初始的10Mbit/s发展到现在的800G,甚至1.6T。这种巨大的进步并不是没有挑战的,但每一次的突破都代表了技术的巨大飞跃。本文将探讨800G和1.6T以太网的创新与挑战。 阅读详情

相关推荐

从AXI到CHI:深入解析基于Credit的流量控制如何优化NoC设计

本文深入解析了从AXI握手式流控到CHI基于Credit的流量控制机制的演进。通过对比传统流控的瓶颈,详细阐述了Credit机制如何通过信用预分配和记账系统,有效解决FIFO气泡、时序收敛等难题,从而优化NoC设计的带宽利用率、降低延迟并提升系统可扩展性。

weixin_29227585的博客 522

5个小技巧提升Python运行速度_python运行加速脚本

① 2000多本Python电子书(主流和经典的书籍应该都有了)② Python标准库资料(最全中文版)③ 项目源码(四五十个有趣且经典的练手项目及源码)④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)⑤ Python学习路线图(告别不入流的学习)

2401_84538884的博客 1058

基于Ollama本地大模型的Python自动化翻译工具开发实践

本文详细介绍了如何利用Ollama本地大模型和Python开发自动化批量翻译工具。通过部署本地开源模型、设计精准提示词、处理长文本分割及多种文档格式,构建了一个兼顾隐私安全、可控性与成本效益的翻译流水线,有效解决了文档批量翻译的痛点。

yhn45678901的博客 560

5个小技巧提升Python运行速度_python运行加速脚本(1)

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。工具都帮大家整理好了,安装就可直接上手!当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

2401_84538884的博客 759

Cursor概述及环境配置

Cursor 是一款基于 AI 的代码编辑器,支持 VS Code 配置迁移和 Java 开发环境配置。主要功能分为 Cursor Settings(AI 相关设置)和 Editor Settings(基础编辑器设置)。用户可通过一键导入或手动方式迁移 VS Code 配置,配置包括主题、扩展和快捷键等。对于 Java 开发,需配置 JDK 和 Maven 路径,并安装 Java 扩展插件以获得完整开发体验,如代码补全、调试和 Maven 项目管理。此外,Cursor 支持汉化配置,用户可安装中文语言包切换

Knight 3552

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

10个优化Python代码的小技巧,使代码运行速度提升5倍!

Python优化指南:让代码运行速度提高5倍。

weixin_39915649的博客 3519

基于STM32设计的智能手环(ESP8266+华为云IOT)_178

为了满足用户对健康监测的需求,手环项目集成了血氧检测、心率检测、体温检测等功能。这些功能采用了专门的传感器模块,如MAX30102、DS18B20等,确保了测量数据的准确性和可靠性。同时,为了方便用户了解自己的运动情况,项目还加入了行走步数统计功能,通过MPU6050模块实现精确计步。

2402

最新5个小技巧提升Python运行速度_python运行加速脚本,2024年最新计算机网络面试常见问题

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~给大家准备的学习资料包括但不限于:Python 环境、pycharm编辑器/永久激活/翻译插件python 零基础视频教程Python 界面开发实战教程Python 爬虫实战教程Python 数据分析实战教程python 游戏开发实战教程Python 电子书100本。

m0_60607895的博客 1016

《低功耗方法学》翻译——第一章:介绍

第一章:介绍

记录所学,分享知识,结识挚友 2069

数据分析案例-对某宝用户评论做情感分析

目录 原始数据 绘制词云图 情感分析 原始数据 原始数据为某宝一商品的用户评论数据 绘制词云图 # coding=utf-8 import jieba import re import wordcloud import imageio # 打开需要分析词频的文本 with open('淘宝评论3.0.txt', encoding='utf-8') as f: data = f.read() # 文本预处理 :去除一些无用的字符只提取出中文出来 new_data

m0_64336780的博客 1万+

Python学习之路(十四)优化py文件运行速度

在写完一个脚本文件之后,会在不同的工程之中进行调用,这就会造成因为脚本的运行效率不高,反复读写文件等,导致了整个工程的运行效率很低,在无休止的等待程序运行的时间里浪费了大量的工作时间,所以说优化运行速度是非常关键的一点,下面就一起来了解一下如何去进行优化。Python查看程序运行时间: 优化程序的效率:​​​​​​python运行速度慢?那是你不会正确使用python_天天开心学编程的博客-优快云博客_脚本运行速度慢5个小技巧提升Python运行速度_pythontip的博客-优快云博客_pytho

qq_43681154的博客 567

【2024遥感应用组一等奖】基于风云四号卫星的小时级大气气溶胶和颗粒物监测

最后,比较AGRI观测反射率和查找表计算的反射率反演得到的1小时分辨率AOD数据。然后,使用广泛应用的MODIS DT和DB产品进行对比,图 5显示了它们逐像元尺度的对比,AGRI LaGA算法可以捕捉亚洲地区AOD高低值空间分布格局,比如南亚次大陆、中南半岛、塔克拉玛干沙漠和华北平原是AOD高值区域(平均AOD高于0.3),中国西北、中国南方、中国东北和韩国地区为AOD中值地区(平均AOD在0.2到0.3之间),北纬45度以上以及日本地区为AOD低值区域(平均AOD小于0.2),与全球平均AOD值接近。

JData_Engineer的博客 373

提高Python运行速度的小技巧

虽然导入模块有时候是必不可少的,但是其实导入模块也是需要花费时间的,当我们在制作模块而需要被其它模块导入时,由于被导入模块通常最上方导入了该模块其它函数或类的依赖模块,于是在被其它模块导入时,某些不必要的模块也会被导入。在一些特殊场景中,我们不必傻乎乎的利用循环进行计算,尝试使用公式计算对于速度的提升将是飞越性的。一个比较好的解决方案是使用f-Strings,通过f-strings拼接可以自动将其他类型转换成字符串类型,并且速度要比‘+’拼接快。我们可以使用列表推导式生成我们想要的列表、元组,甚至字典等。

2501_92499985的博客 942

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[Python] 提高Python运行速度(小技巧)

虽然导入模块有时候是必不可少的,但是其实导入模块也是需要花费时间的,当我们在制作模块而需要被其它模块导入时,由于被导入模块通常最上方导入了该模块其它函数或类的依赖模块,于是在被其它模块导入时,某些不必要的模块也会被导入。在一些特殊场景中,我们不必傻乎乎的利用循环进行计算,尝试使用公式计算对于速度的提升将是飞越性的。一个比较好的解决方案是使用f-Strings,通过f-strings拼接可以自动将其他类型转换成字符串类型,并且速度要比‘+’拼接快。我们可以使用列表推导式生成我们想要的列表、元组,甚至字典等。

知智 5323

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python速度提升秘籍:小技巧大作用

本文深入探讨了一系列有助于提升Python程序性能的小技巧和最佳实践。Python作为一门灵活而强大的编程语言,在某些情况下可能受到执行速度的限制。通过采取以下措施,可以显著提高程序的运行速度:首先,选择适当的数据结构对于程序性能至关重要。不同的数据结构适用于不同的场景,合理选择可以减少运算时间和内存消耗。避免全局解释器锁(GIL)是提高多线程程序性能的关键。使用多进程代替多线程或者利用模块可以更好地利用多核处理器。

涛哥聊Python 1126

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

提升python运行速度的一些技巧

2、善用强大的内置函数和第三方库,如果你正在使用python并且仍在自己编写一些通用函数,那建议可以试试 Python提供的库和内置函数来帮助你不用编写这些函数。3、避免循环重复计算,如果你有一个迭代器,必须用它的元素做一些耗时计算,比如匹配正则表达式。只要有可能,就应该尝试在循环外进行尽可能多的运算,比如将函数计算分配给局部变量,然后在函数中使用它。时代,Python 是目前使用最广泛的编程语言之一,它是一种解释型高级通用编程语言,具有广泛的用途,几乎可以将其用于所有事物。​ # 代理验证信息。

javasdn的博客 1276

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

Python版本是在不停迭代更新的,每次更新都会包含优化内容,这其中不但会优化内置函数、内置方法、更新模块,增加新的语法、模块等,还会优化运行速度,截止目前,最新的Python11某些方便运行速度相较于旧版本更是提升30%左右。Python本地库functools中的装饰器:@functools.lru_cache,它就能够缓存函数最近的调用,当缓存的值在特定时间内保持不变的时候这个非常好用,比如递归调用问题。同样的,在Python编程中,如果有专门的库,那么处理起来也事半功倍,而且效率也高。

知智 7971

提升 Python 能力的 10 个小技巧

Python 作为一门强大且易学的编程语言,广泛应用于数据科学、人工智能、自动化、Web 开发等多个领域。然而,想要从 Python 初学者成长为高效的开发者,不仅需要掌握基础语法,还需要不断优化编程思维,提高代码质量,熟练使用工具。本文总结了 10 个实用的小技巧,帮助你更快提升 Python 编码能力,让代码更简洁、高效、可读性更强。        

引用原创内容标明出处即可 1435

掌握这10个Python小技巧,让你敲代码速度快5倍不止

问各位一个问题,你有木有经历过这一的场景: 老板让你和同事同事敲代码,同样的时间,别人却比你做的快了很多倍,而且做的还很不错? 其实很多时候也不是你不厉害,更多的是很多基础的效率操作,你没有发现。 Python学习教程:今天要跟大家分享几个PyCharm小技巧,帮助大家提升工作效率! # 0. PyCharm 常用快捷键 # 1. 查看使用库源码 ...

喜欢打酱油的老鸟 1685
上一篇: Python零基础自学要多久?编程小白怎么学?
下一篇: 新手入门 Python 必读,学会少走五年弯路
普通网友
博客等级 码龄3年 4493粉丝 309原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值