page contents

求你不要再用这几个 Python 编码了,太慢了...

本文讲述了求你不要再用这几个python编码了,太慢了...!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

attachments-2024-04-Tbg7PsXZ6614b3347cf61.png本文讲述了求你不要再用这几个python编码了,太慢了...!具有很好的参考价值,希望对大家有所帮助。一起跟随好学星城小编过来看看吧,具体如下:

Python 脚本的运行速度一直都是开发者诟病的地方,无论是网站运行迟缓,还是数据分析工作长达数小时,代码运行缓慢将影响所有相关人员,使其效率大打折扣,甚至可能危及项目的成功。
在本文中,我将介绍一些的最常见的拖垮性能的一些编程代码,并推荐相应的解决方法,为你的 Python 涡轮增压!当然,如果你不限于此,推荐你看下前面推荐 mojo 语言 比 Python 快几万倍:比Python快9万倍!AI编程语言Mojo正式开源。

01 循环
我们通常对for循环情有独钟,在需要进行大量作业时,首先想到的就是使用 for 循环。而在优化速度时,尤其是在讨论大型数据集时,这些循环简直就是噩梦般存在。

数字加法:将一大串数字的平方相加,首先使用一个循环方法:

numbers = [1, 2, 3, 4, 5, ... , 10000]  # A big list
total = 0
for number in numbers:
    squared = number * number
    total += squared
在引擎下,Python 会对每个元素进行大量的单独计算。

解决方法:NumPy
这时,NumPy 就像超级英雄一样,它的矢量化简直无敌!一次性对整个数组执行操作。

import numpy as np

numbers = np.array([1, 2, 3, 4, 5, ... , 10000])  
squared = numbers * numbers  # Vectorized squaring!
total = squared.sum()
NumPy 不需要逐个元素计算,而是一气呵成地处理整个计算过程。

折中方案
列表推导式:

total = sum(number * number for number in numbers)
它们通常比传统循环更快,但在进行高强度数值计算时,可能无法与 NumPy 匹敌。

02 错用工具
对于 Python 来说,仅仅依靠列表来完成所有任务无异于只用一只手编程。

查询电话号码:假设有一个这样的联系人列表:

contacts = [
    {"name": "Alice", "phone": "123-4567"},
    {"name": "云朵君", "phone": "789-0123"},
    # ... more contacts
]
查找云朵君的号码意味着要扫描列表,可能要检查每一个联系人。

解决方法:具有超能力的数据结构
字典:快速查找的好帮手
如果要通过关键字(如 "姓名")进行搜索,字典就是你的救星。

contacts_dict = {
    "Alice": "123-4567",
    "云朵君": "789-0123",
    # ... more contacts
}
bobs_number = contacts_dict["云朵君"]  # Instant access!
集合: 强制执行唯一性
需要跟踪唯一的网站访问者吗?集合会自动删除重复项。

unique_visitors = set()
unique_visitors.add("192.168.1.100")
unique_visitors.add("124.58.23.5")
unique_visitors.add("192.168.1.100")  # No duplicate added
Python 还提供了更多超级有用的工具:有序字典、特殊队列 deques 等。了解何时使用这些工具标志着优秀与卓越脚本之间的区别。

03 在黑盒中优化
你一定对这种感觉很熟悉,虽然发现了代码运行缓慢,但却对原因一无所知时。这就好比在没有灯光的情况下修灯泡。

假设你有一个计算斐波那契数字的函数。你费尽心力来完善数学推理,但速度仍然很慢。结果发现,瓶颈可能是某些看不见的东西,比如在边运行代码边将结果记录到磁盘文件中。

解决方法:cProfile 来救场!
Python 内置的cProfile模块就是你的性能侦探。下面介绍如何使用它:

import cProfile

def my_function():
    # Your code to be profiled

cProfile.run('my_function()')
这将生成大量统计数据。主要内容如下

ncalls: 函数被调用的次数。
tottime: 在函数中花费的总时间。
cumtime: 与 tottime 类似,但包括调用其中所有函数所花费的时间。
筛选线索这些数字将指出真正的瓶颈,帮助你将优化工作集中在影响最大的地方。

04:重复造轮子
重新造轮子就像决定徒步穿越整个国家,而不是乘坐飞机前往目的地。就像上一步介绍的python工具一样,其实Python 真的有很多神奇的内置函数来帮助你完成你的工作。要不然python怎么会被戏称胶水语言呢。

排序:可以编写自己的冒泡排序实现......或者使用 Python 的sorted():

my_list = [5, 3, 1, 4, 2]

# The long way (probably pretty slow)
def my_bubble_sort(list): 
   # ... your sorting code here

# The Pythonic way
sorted_list = sorted(my_list)
很有可能,你的自定义排序算法甚至无法达到内置算法的效率。当然,如果你是编程超级高手,不用在意这些

  • 发表于 2024-04-09 11:17
  • 阅读 ( 47 )
  • 分类:行业资讯

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1316 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1316 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章