首页 > 编程语言 >5个代码技巧,加速你的Python! 转载

5个代码技巧,加速你的Python! 转载

时间:2023-08-14 09:33:42浏览次数:50  
标签:技巧 Python counter 列表 np import 转载 perf

原文:https://mp.weixin.qq.com/s/xLIlcXfW1O8sNxGT7RvKrQ

来自公众号:快学Python

Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发等等。

而在数据科学领域中,Python 是使用最广泛的编程语言,并且其受欢迎程度持续增长。如果也经常需要用Python处理海量数据,就一定会遇到代码运行几十分钟甚至更久的情况。今天我们会给大家分享7个代码技巧,加速你的Python运行速度,提高Python技能!

技巧 1:加速 NumPy

NumPy是一个可高效处理数组的 Python 库,它还提供快速和优化的矢量化操作。但!它不支持并行处理。作为 NumPy 的替代品,我们可以使用NumExpr。NumExpr 的性能明显优于 NumPy,因为它支持多线程。此外,它避免了为中间结果分配内存。

pip install numexpr

在交互式环境中输入如下命令:

import numpy as np
import numexpr as ne
import timeit

var1 = np.random.random(2**27)
var2 = np.random.random(2**27)

%timeit np.sin(var1) / np.cos(var2)
%timeit ne.evaluate("sin(var1) / cos(var2)")

输出:

图片

根据执行结果,使用 NumExpr 大约快 4 倍。当你有大型数组需要处理时,NumExpr 效果最佳。

技巧 2:优先使用内置函数

Python 内置函数比自定义实现快得多,因此我们要优先使用它们。

举个例子:

图片

在上面的代码中,我们将一个包含四个条目的列表复制了 1000 万次,因此我们得到了一个包含 4000 万个条目的列表,然后我们将列表中的字符串转换为小写。

可以看到结果,使用内置函数的速度提高了大约 23倍。

关于内置函数的使用,可以参考我们之前分享的文章:

Python中堪称神仙的6个内置函数

Python中最常用的10个内置函数

技巧 3:使用列表生成式

经常使用列表和for循环来存储计算结果,其实使用列表生成式能更快。

在交互式环境中输入如下命令:

import numpy as np
from time import perf_counter

result_list_loop = []
result_list_com = []

number_round = 10000000

start = perf_counter()
for i in range(number_round):
    result_list_loop.append(i*i)
print(perf_counter()-start)

start = perf_counter()
result_list_com = [i*i for i in range(number_round)]
print(perf_counter()-start)

print(result_list_com[10])

输出:

图片

如上图所示,使用列表生成式能快3倍。

列表生成式是一种基于其他iterable(如集合、元组、其他列表等)创建列表的方法,大家感兴趣可以自行了解一下。

图片

技巧 4:不要导入不必要的模块

估计大家可能已经多次听到这个技巧,但它可以显着提高代码的性能。有时候没有必要导入整个库,毕竟我们通常只需要它的某些功能。

这里我们使用math模块作为例子:

import math
from time import perf_counter

start = perf_counter()
variable = math.exp(7)
print(perf_counter()-start)

接着我们不导入整个math模块,只使用需要的 exp() 函数。

from math import exp
from time import perf_counter

start = perf_counter()
variable = exp(7)
print(perf_counter()-start)

两次运行时间比较:

图片

技巧 5:使用numba

Numba 是一款为 python 打造的、专门针对 Numpy 数组循环计算场景的即时编译器。

在交互式环境中输入如下命令:

df = pd.DataFrame({'x':np.random.rand(10000)})
                    
def calculate(x):
    return np.sum(x)/x.size

输出分别Numba和低级语言CPython进行加速:

图片

结果可以看到,我们的自定义函数在使用engine='numba' 或 engine='cython' 后,速度明显加快!

标签:技巧,Python,counter,列表,np,import,转载,perf
From: https://www.cnblogs.com/testzcy/p/17627793.html

相关文章

  • python实战练习:sorted函数排序后返回一个新列表,所以不用再套一层list函数进行转化了
        使用集合set去重后,如果想要返回结果为列表形式,不用在外层套list函数了,因为sorted排完序后会返回一个新列表。names=input().split("")print(sorted(set(names)))#不需要再套一层list函数了print(sorted(list(set(names)))) ......
  • python实战练习:对哪部分使用类型转换
         l=[]whileTrue:s=input()ifs=='0':#注意:这里是对0加引号,而不是使用int(s),如果输入'hello',int(s)会报错,所以是用字符串'0'breakelse:l.append(s)print("".join(l)) ......
  • python打包库nuitka测试 是否和c++的速度差不多
    nuitka一个打包py脚本的库原理是把py代码转成c++代码再重新编译宣传的优点是打包的程序速度快占用空间小用了一些时间了突然想测试一下性能是否和宣传的一样写了一个输出一百万以内素数个数的脚本 打包成exe结果  不打包执行 说实话挺失望还剩一个优点空间......
  • python用筛法输出指定范围素数个数
    1importtime2stime=time.time()3defq(n):4is_prime={x:Trueforxinrange(n+1)}#生成一个n个元素的字典key设置为0-n+1值设置为True5delis_prime[0]#删除06forcin(2,3,5,7):7forzinrange(2,int(n/2)):8......
  • Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?
    你好,我是猫哥。这里每周分享优质的Python、AI及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。本周刊精心筛选国内外的250+信息源,为你挑选最值得分享的文章、教程、开源项目、软件工具、播客和视频、热门话题等内容。愿景:帮助所有读者精......
  • 测试开发笔试题(python)
    测试开发笔试题(python)_测试开发python笔试题_coco_qa的博客-CSDN博客1、字符串相关1.1字符串中最大长度子串#字符串中最大长度子串#如字符串abcd13agbf,当重复出现某个字符时,算一个子串,比如abcd13a或bcd13agb都是子串str1='abcd13agbf'str_list=[]foriinrange(l......
  • python 实现队列
    官方文档不推荐使用列表因为列表删除第一个元素会把剩余元素向左移一位速度很慢官方推荐的是collections下的deque 记录一下防止忘记 fromcollectionsimportdeque d=deque(‘内容’,maxlength)内容可以是推导式也可以直接写内容内容写在一起比如'123'结果会......
  • #region在多种编程语言及IDE中进行代码折叠,包括python msvc++ c#等
    vs/rider中折叠C#代码在写C#的时候,在visualstudio中可以使用#region和#endregion来进行代码折叠,那么在pycharm中是否可以呢?//这里有很多的代码......#region//这里的数百行的伪代码,可以直接折叠起来,方便阅读及归类[MenuItem("KEngine/KSFrameworkOptionsandHelp")]priva......
  • python实战练习2
        cities_dict={'Beijing':'China','Paris':'France','Moscow':'Russia'}print('原始列表的key顺序:',cities_dict)print("不对键排序时输出的city顺序:")forcityincities_dict.keys():......
  • Python教程(8)——一文弄懂Python字符串操作(下)
    (Python字符串操作)字符串常用方法字符串在编程中是一种不可或缺的数据类型,它在文本和字符数据时提供了丰富而强大的功能。掌握了字符串的使用方法,你能够更加便捷地进行文本处理、数据操作、用户交互等任务,从而提高编程效率和质量。len():返回字符串的长度。str1="Hello,Wo......