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

实现更快的python核心编码技巧有哪些

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

实现更快的python核心编码技巧有哪些

本篇内容介绍了“实现更快的python核心编码技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1。Memoize(缓存)重复使用的数据

当你能做到一次并保存结果时,千万不要做一千次工作。如果有一个经常调用的函数返回可预测的结果,那么python为您提供了将结果缓存到内存中的选项。返回相同结果的后续调用几乎会立即返回。

各种各样的例子展示了如何做到这一点;我最喜欢的记忆几乎是最少的。python的一个本机库functools具有@functools.lru缓存装饰器,它缓存最近对函数的n个调用。当正在缓存的值发生变化,但在特定的时间窗口内是相对静态的时,这很方便。一天中最新使用的项目列表就是一个很好的例子。

2。将数学移动到numpy

如果您正在进行基于矩阵或数组的数学运算,并且不希望Python解释器妨碍您的工作,请使用numpy。通过利用C库进行繁重的工作,numpy提供了比本机python更快的数组处理。它还比Python的内置数据结构更有效地存储数字数据。

相对来说,非异类的数学也可以被numpy大大加快。该包为许多常见的python数学操作(如min和max)提供了替换,这些操作的速度比原来的python快很多倍。

numpy的另一个好处是更有效地使用大型对象的内存,比如拥有数百万个项目的列表。一般来说,像numpy中那样的大型对象如果用传统的python来表示,则占用大约四分之一的内存。请注意,它有助于从作业的正确数据结构开始,即优化本身。

重写python算法以使用numpy需要一些工作,因为数组对象需要使用numpy的语法声明。但是numpy在实际的数学运算中使用了python现有的习语(+、-,等等),所以从长远来看,切换到numpy并不会太令人迷惑。

3。使用C库

numpy使用C语言编写的库是一种很好的模拟策略。如果有一个现有的C库可以满足您的需要,那么Python及其生态系统提供了几个选项来连接到该库并利用其速度。

最常见的方法是使用Python的CTypes库。因为ctypes与其他python应用程序(和运行时)广泛兼容,所以它是最佳的开始位置,但它远不是镇上唯一的游戏。cffi项目为c.cython提供了一个更优雅的接口(见下文),也可以用来包装外部库,尽管代价是必须学习cython的标记。

4。与多处理并行

传统的python应用程序——那些在cpython中实现的应用程序——一次只执行一个线程,以避免在使用多个线程时出现状态问题。这是臭名昭著的全球口译员锁(gil)。它的存在有充分的理由,这并没有使它变得更加华丽。

随着时间的推移,gil的效率显著提高(运行python 3而不是python 2的另一个原因),但核心问题仍然存在。一个cpython应用程序可以是多线程的,但是cpython不允许这些线程在多个核心上并行运行。

为了解决这个问题,python提供了多处理模块来在不同的核心上运行python解释器的多个实例。状态可以通过共享内存或服务器进程来共享,数据可以通过队列或管道在进程实例之间传递。

您仍然需要在进程之间手动管理状态。另外,在启动多个Python实例并在其中传递对象的过程中,不会有太多的开销。但是对于长期运行的进程来说,多处理库是非常有用的,因为它可以从跨核心的并行性中获益。

另外,使用C库的python模块和包(如numpy)完全避免使用gil。这也是他们被推荐提速的另一个原因。

5。知道你的库在做什么

简单地输入XYZ并利用无数其他程序员的工作是多么方便!但是您需要知道,第三方库可以改变应用程序的性能,而不是总是为了更好。

有时,这以明显的方式表现出来,例如当来自特定库的模块构成瓶颈时。(再次强调,剖析会有所帮助。)有时情况不那么明显。示例:Pyglet是一个用于创建窗口化图形应用程序的简便库,它自动启用调试模式,这会显著影响性能,直到显式禁用它为止。除非您阅读文档,否则您可能永远不会意识到这一点。阅读并被告知。

6。注意平台

python运行跨平台,但这并不意味着每个操作系统(windows、linux、os x)的特性都是在python下抽象出来的。大多数时候,这意味着要了解平台的具体情况,比如路径命名约定,对于这些约定,有助手函数。

但在性能方面,了解平台差异也很重要。例如,在Windows上,需要计时器精度小于15毫秒(例如,对于多媒体)的python脚本将需要使用Windows API调用来访问高分辨率计时器或提高计时器分辨率。

7。与PyPy同行

cpython是Python最常用的实现,它将兼容性优先于原始速度。对于那些想把速度放在首位的程序员来说,有pypy,一个配备了jit编译器的python实现来加速代码执行。

因为pypy是作为cpython的替代品而设计的,所以它是快速提高性能的最简单方法之一。许多常见的python应用程序将在pypy上运行。一般来说,应用程序越依赖于“普通”的python,就越有可能在pypy上运行而不进行修改。

然而,充分利用PYPY可能需要测试和研究。您会发现长时间运行的应用程序从Pypy获得最大的性能收益,因为编译器会分析一段时间后的执行情况。对于运行和退出的短脚本,您最好使用cpython,因为性能提升不足以克服JIT的开销。

请注意,pypy对python 3的支持仍然落后于几个版本;它目前支持python 3.2.5。使用最新的python特性(如async和await-co例程)的代码将无法工作。最后,使用ctypes的python应用程序的行为可能并不总是如预期的那样。如果您正在编写可能同时在pypy和cpython上运行的东西,那么为每个解释器分别处理用例可能是有意义的。

其他通过抖动加速python的实验仍在取得成果。其中包括一个微软项目pyjion,它为cpython提供了一个JIT接口。微软提供了自己的JIT作为概念证明。

8。升级至python 3

如果您使用的是python 2.x,并且没有覆盖的原因(比如不兼容的模块)来坚持使用它,那么您应该跳到python 3。

除了python 3作为语言的未来,python 3中还提供了许多构造和优化,而python 2.x中没有这些构造和优化。例如,python 3.5通过将async和wait关键字作为语言语法的一部分来减少异步编程的麻烦。python 3.2对全局解释器锁进行了重大升级,显著改进了python处理多个线程的方式。

“实现更快的python核心编码技巧有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

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

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

实现更快的python核心编码技巧有哪些

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

下载Word文档

猜你喜欢

实现更快的python核心编码技巧有哪些

本篇内容介绍了“实现更快的python核心编码技巧有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1。Memoize(缓存)重复使用的数
2023-06-02

编写更简洁Python代码的技巧有哪些

这篇文章主要介绍“编写更简洁Python代码的技巧有哪些”,在日常操作中,相信很多人在编写更简洁Python代码的技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”编写更简洁Python代码的技巧有哪些
2023-06-16

有哪些技巧编写出更好的Python代码

这篇文章主要讲解了“有哪些技巧编写出更好的Python代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些技巧编写出更好的Python代码”吧!1. 使用enumerate()而不是ra
2023-06-16

Python有哪些技巧能编写更好的代码

这篇文章主要讲解了“Python有哪些技巧能编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python有哪些技巧能编写更好的代码”吧!技巧01-变量的多重分配Python允许我
2023-06-16

加快Python编程的小技巧有哪些

这篇文章主要介绍“加快Python编程的小技巧有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“加快Python编程的小技巧有哪些”文章能帮助大家解决问题。1.负索引人们喜欢使用序列,因为当我们知
2023-06-27

有哪些Python技巧用于编写更好的代码

这篇文章主要讲解了“有哪些Python技巧用于编写更好的代码”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些Python技巧用于编写更好的代码”吧!1. F StringF字符串为将Py
2023-06-16

用Python进行编码的技巧有哪些

本篇内容主要讲解“用Python进行编码的技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用Python进行编码的技巧有哪些”吧!1. 可读性的重要性程序必须为了人们能够读懂而编写,其次
2023-06-16

编写更简洁React代码的技巧有哪些

这篇文章主要介绍“编写更简洁React代码的技巧有哪些”,在日常操作中,相信很多人在编写更简洁React代码的技巧有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”编写更简洁React代码的技巧有哪些”的疑
2023-07-04

python实用的快捷语法技巧有哪些

本篇内容主要讲解“python实用的快捷语法技巧有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python实用的快捷语法技巧有哪些”吧!前言你知道a**3是什么意思吗?你知道怎么打印模块路
2023-06-29

Python中的字节编码和解码技巧有哪些?

Python中的字节编码和解码技巧有哪些?字节编码和解码是我们在处理文本数据时常常遇到的问题。在Python中,有许多内置的函数和模块可以帮助我们进行字节编码和解码操作。本文将介绍几种常见的字节编码和解码技巧,并给出相应的代码示例。使用en
2023-10-22

有哪些提高Python编码水平的小技巧

本篇内容介绍了“有哪些提高Python编码水平的小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 分割序列常见的序列类型有列表、元组
2023-06-16

编程热搜

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

目录