01 使用哈希表的数据结构

 
如果在程序中遇到大量搜索操作时,并且数据中没有重复项,则可以使用查找而不是循环。举例如下:
items = ['a', 'b',..,'100m'] #1000s of items found = False for i in items: if (i == '100m'): found = True
可以改写为
items = {'a':'a', 'b':'b:,..,'100m':'100m'} #each item is key/value found = False if '100m' in items: found = True

02 矢量化取代循环

 
尽量使用基于C构建的Python库,例如Numpy,Scipy和Pandas,并且利用矢量化同时处理来取代程序中编写多次处理数组单个元素的循环,循环可能是程序优化最容易被拿来开刀的地方了。举例如下:在对数组中每个元素求平方时直接用数组相乘,而不是两个for循环。
import numpy as np array = np.array([[1., 2., 3.], [4., 5., 6.]]) m_array = array*array

03 精简代码行数

 
在编程时,尽量使用一些python的内置函数来精简代码行数,是代码显得简洁凝练,大大提高代码运行效率。举例如下:
newlist = [] def my_fun(a): return a + 't' for w in some_list: newlist.append(my_fun(w))
可以改写为
def my_fun(a): return a + 't' newlist = map(my_fun, some_list)
 

04 使用多进程

一般计算机都是多进程的,那么在执行操作时可以使用Python中的multiproccessing。多进程可在代码中实现并行化。 当您要实例化新进程,访问共享内存时,多进程成本很高,因此如果有大量数据处理时可以考虑使用多进程。 对于少量数据,则不提倡使用多进程。举例如下:
def some_func(d): #computations data = [1,2,..,10000] #large data for d in data: some_func(d)
可以改写为
import multiprocessing def some_func(d): #computations data = [1,2,..,10000] #large data pool = multiprocessing.Pool(processes=number_of_processors) r = pool.map(some_func, data) pool.close()
 

05 使用Cpython

Cython是一个静态编译器,可以为您优化代码。加载cypthonmagic扩展并使用cython标记使用cython编译代码。
Cpython的安装:
pip install Cython
Cpython的使用:
% load_ext cythonmagic %%cython def do_work(): ... #computationally intensive work

06 尽量使用csv替代xlsx

在进行数据处理时, 我需要更长的时间才能将数据加载到excel文件或从excel文件保存数据。 相反,我选择了创建多个csv文件的路径,并创建了一个文件夹来对文件进行分组。举例如下:
df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2']) df.to_excel("my.xlsx") df2 = df.copy() with pd.ExcelWriter('my.xlsx') as writer: df.to_excel(writer, sheet_name='Sheet_name_1') df2.to_excel(writer, sheet_name='Sheet_name_2')
可以改写为
df = pd.DataFrame([['a', 'b'], ['c', 'd']],index=['row 1', 'row 2'],columns=['col 1', 'col 2']) df2 = df.copy() df.to_csv("my.csv") df2.to_csv("my.csv")

07 使用Numba

它是一个JIT(即时)编译器。 通过装饰器,Numba将带注释的Python和NumPy代码编译为LLVM 。将您的功能分为两部分:
1.执行计算的函数 - 使用@autojit进行装饰
2.执行IO的功能
from numba import jit, autojit @autojit def calculation(a): .... def main(): calc_result = calculation(some_object) d = np.array(calc_result) #save to file return d

08 使用Dask来并行化Pandas DataFrame

Dask很棒! 它帮助我处理数据框中的数值函数和并行的numpy。 我甚至试图在集群上扩展它,它就是这么简单!
import pandas as pd import dask.dataframe as dd from dask.multiprocessing import get data = pd.DataFrame(...) #large data set def my_time_consuming_function(d): .... #long running function ddata = dd.from_pandas(data, npartitions=30) def apply_my_func(df): return df.apply( (lambda row: my_time_consuming_function(*row)), axis=1) def dask_apply(): return ddata.map_partitions(apply_my_func).compute(get=get)

09 使用Pandarallel库

Pandarallel可以将pandas操作与多个进程并行化同样,仅在您拥有大型数据集时使用。
from pandarallel import pandarallel from math import sin pandarallel.initialize() # ALLOWED def my_time_consuming_function(x): .... df.parallel_apply(my_time_consuming_function, axis=1)
总结
对于提高Python的性能,第一是先编写简洁,高效的代码。 我们必须确保代码不会在循环中反复执行相同的计算。第二不要为集合中的每个记录打开/关闭IO连接。第三要确保在不需要时不创建新的对象实例。通过大量的编程练习,掌握一些高级的编程方法对你十分重要。
 

提高Python的性能的更多相关文章

  1. 【翻译】七个习惯提高Python程序的性能

    原文链接:https://www.tutorialdocs.com/article/7-habits-to-improve-python-programs.html 掌握一些技巧,可尽量提高Pytho ...

  2. 7个提升Python程序性能的好习惯

    原文作者:爱coding,会编程的核电工程师. 个人博客地址:zhihu.com/people/zhong-yun-75-63 掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费 ...

  3. 七个可以提升python程序性能的好习惯,你知道吗?

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...

  4. 【python 应用之四】提升 Python 运行性能的 7 个习惯

    大家都知道艺赛旗的 RPA 依赖于 python 语言.因此我们可以掌握一些技巧,可尽量提高 Python 程序性能,也可以避免不必要的资源浪费.1.使用局部变量 尽量使用局部变量代替全局变量:便于维 ...

  5. [转] Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  6. Python代码性能优化技巧

    摘要:代码优化能够让程序运行更快,可以提高程序的执行效率等,对于一名软件开发人员来说,如何优化代码,从哪里入手进行优化?这些都是他们十分关心的问题.本文着重讲了如何优化Python代码,看完一定会让你 ...

  7. Python 代码性能优化技巧(转)

    原文:Python 代码性能优化技巧 Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化. ...

  8. Python 代码性能优化技巧

    选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...

  9. 提高ASP.net性能的十种方法

    提高ASP.net性能的十种方法 2014-10-24  空城66  摘自 博客园  阅 67  转 1 转藏到我的图书馆   微信分享:   今天无意中看了一篇关于提高ASP.NET性能的文章,个人 ...

随机推荐

  1. GitHub Actions & GitHub Secrets

    GitHub Actions & GitHub Secrets tokens & private variable GitHub Secrets https://github.com/ ...

  2. DevOps tools

    DevOps tools mozart & ansible https://www.ansible.com/integrations/devops-tools websocket jenken ...

  3. git include只包含某些文件

    .gitignore: * # include !.gitignore !a.txt !dir2

  4. NGK Global伦敦路演:“区块链+能源”必将推动世界性能源革命

    随着区块链技术的发展和应用的不断完善深入,市场的热情也开始活跃高涨,在万众期待下,NGK Global在英国伦敦的路演于7月25日圆满举办. 此次伦敦路演会议中众多行业精英,各社区代表.星盟投资公司资 ...

  5. 云原生系列6 基于springcloud架构风格的本地debug实现

    debug是程序员在日常开发中最常使用的操作, 那么,你是如何快速在微服务架构风格下快速debug后端服务呢? 开发现状 开发的理想状态 本地调测的使用步骤 登录智能网关 如果集成开发环境是在本地局域 ...

  6. .net core 和 WPF 开发升讯威在线客服系统:怎样实现拔网线也不丢消息的高可靠通信(附视频)

    本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程.本产品已经成熟稳定并投入商用. 在线演示环境:https://kf.shengxunwei.com 注意 ...

  7. now-go时间百宝箱

    golang不像C#,Java这种高级语言,有丰富的语法糖供开发者很方便的调用.所以这便催生出很多的开源组件,通过使用这些第三方组件能够帮助我们在开发过程中少踩很多的坑. 时间处理是所有语言都要面对的 ...

  8. servlet内置对象(传递数据)

    一个servlet向另一个servlet发送数据,可以将数据放置在一个容器中(io.数据库.servlet的内置对象),servlet的内置对象成本最小. 一共有三个内置对象. 名字 类型 reque ...

  9. ServiceMesh

    传统微服务架构 在微服务模式下,企业内部服务少则几个到几十个,多则上百个,每个服务一般都以集群方式部署,这时自然产生两个问题: 一.服务发现:服务的消费方(Consumer)如何发现服务的提供方(Pr ...

  10. Deep Unfolding Network for Image Super-Resolution 论文解读

    Introduction 超分是一个在 low level CV 领域中经典的病态问题,比如增强图像视觉质量.改善其他 high level 视觉任务的表现.Zhang Kai 老师这篇文章在我看到的 ...