Python开发指南, 超级实用足以让您震撼

> Photo by Christina Morillo from StockSnap

时不时地,当我了解Python的新功能时,或者我发现其他一些人不知道该功能时,我会记下它。

在过去的几周中,我最近了解或实现了一些有趣的功能-Stack Overflow

这里有十个精巧的Python开发技巧,我敢肯定您从未见过。 快速浏览其中一些功能,以及每个功能的概要。

注意:代码在此故事中显示为图像。 此外,您将在最后获得GitHub Readme链接,以进一步进行实验

01.如何在运行状态下查看源代码?

查看该函数的源代码,我们通常使用IDE来完成。

例如,在PyCharm中,您可以使用Ctrl +鼠标输入功能的源代码。

如果没有IDE怎么办?

· 当我们想使用一个函数时,我们如何知道该函数需要接收哪些参数?

· 当我们在使用函数时遇到问题时,如何通过阅读源代码来解决问题?

目前,我们可以使用inspect而不是IDE来帮助您完成这些事情

inspect.getsource:返回对象源代码的文本。

检查模块提供了几个有用的功能,以帮助获取有关活动对象的信息,例如模块,类,方法,函数,回溯,框架对象和代码对象

此模块提供的四种主要服务:

· 类型检查,

· 获取源代码,

· 检查类和功能

· 检查解释器堆栈。

02.查看包路径的最快方法

当使用import导入软件包或模块时,Python将在某些目录中查找,并且这些目录具有优先级顺序,通常我们将使用sys.path进行查看。

有没有更快的方法?

在这里我想介绍一种比上面更方便的方法,可以解决一行命令

从输出中,您可以发现此列的路径将比sys.path(包含用户环境的目录)更完整。

03.将嵌套的循环写为一行

我们经常使用以下嵌套的循环代码

这里只有三个for循环,在实际编码中,可能会有更多的层。

这样的代码可读性很差,人们不想编写它,并且有一种更好的编写方法。

在这里,我介绍一种常用的编写方法,该方法使用itertools库实现更优雅和可读的代码。

04.如何使用打印输出日志

许多人喜欢使用打印来调试代码并记录程序的运行过程。

但是,打印只会将内容输出到终端,而不能保留到日志文件中,这不利于故障排除。

如果您热衷于使用打印来调试代码(尽管这不是最佳实践),请记录运行程序的过程,那么下面描述的打印用法可能对您有用。

在Python 3中将其打印为函数,因为它可以接收更多参数,所以函数本身变得更强大

代码如下所示:

05.如何快速计算功能运行时间

计算一个函数的运行时间,你可以这样

您会看到编写了几行代码来计算函数的运行时间。

有没有一种方法可以更方便地计算运行时间? 是的,使用称为timeit的内置模块

只需一行代码即可使用

结果如下

2222210.020059824

06.使用内置的缓存机制来提高效率

缓存是一种存储定量数据以满足后续采集需求的方法,旨在加快数据采集的速度。

数据生成过程可能需要诸如计算,正则化和远程获取之类的操作。 如果同一数据需要多次使用,则每次重新生成都将浪费时间。

因此,如果将通过诸如计算或远程请求之类的操作获得的数据进行缓存,则将加速后续的数据获取需求。

为了达到这个要求,Python 3.2+为我们提供了一种易于实现的机制,而无需您编写这样的逻辑代码。

该机制是在functool模块的lru_cache装饰器中实现的。

参数解释:

· maxsize:此函数调用最多可以缓存多少个结果,如果为None则没有限制,设置为2的幂时,性能最佳

· 类型:如果为True,则将分别缓存不同参数类型的调用。

例如

输出如下,您可以看到第二个调用不执行函数主体,而是直接将结果返回到缓存中

calculating: 1 + 233

calculating: 2 + 35

以下是经典的斐波那契数列,当您指定较大的n时,会有很多重复的计算

现在可以将第6点中介绍的timeit用于测试可以提高多少效率。

如果不使用lru_cache,则运行时间为31秒

使用lru_cache后,运行速度过快,因此我将n的值从30调整为500,但是即使这样,运行时间也只有0.0004秒。 速度的提高非常显着。

07.在程序退出之前执行代码的提示

使用内置模块atexit,您可以轻松注册和退出功能。

无论您在哪里导致程序崩溃,它都会执行您已注册的功能。 例子如下

结果如下:

如果clean()函数具有参数,则可以在不使用修饰符的情况下调用atexit.register(clean_1,参数1,参数2,参数3 =" xxx")。

也许您还有其他方法可以处理这种需求,但是与不使用atexit相比,它更优雅,更方便,并且易于扩展。

但是使用atexit仍然有一些限制,例如:

· 如果程序被尚未处理的系统信号杀死,则注册的功能将无法正常执行。

· 如果发生严重的Python内部错误,则无法正常执行您注册的函数。

· 如果手动调用os._exit(),则无法正常执行注册的功能。

08.如何关闭异常关联上下文?

当您处理异常时,由于处理不当或其他问题,当引发另一个异常时,抛出的异常还将携带原始异常信息。

再次阅读它,您现在一定会理解:)

像这样。

您可以从输出中看到两条异常消息

如果在异常处理程序或finally块中引发异常,则默认情况下,异常机制将隐式工作,以将先前的异常附加为新异常的__context__属性。

这是Python默认情况下启用的自动关联异常上下文。

如果要自己控制此上下文,则可以添加一个from关键字(from的限制是第二个表达式必须是另一个异常类或实例。)以指示哪个异常导致了您的新异常。

输出如下

当然,您也可以使用with_traceback()方法设置异常的__context__属性,这也可以在回溯中更好地显示异常信息。

最后,是否要完全关闭这种自动关联异常上下文的机制? 我们还能做什么?

可以使用引发…从无,从下面的示例,没有原始异常

09.实施类似延迟的呼叫

Golang中有一种延迟通话的机制。 关键字为defer,如下所示

myfunc的调用将在函数返回之前完成,即使您在函数的第一行上编写了myfunc的调用,这也是延迟的调用。 输出如下,

AB

那么Python中有这种机制吗?

当然有,但是没有Golang这么简单。

我们可以使用Python上下文管理器来达到这种效果

输出如下

AB

10.如何流式读取大文件

使用with…open…可以从文件中读取数据,这是所有Python开发人员都非常熟悉的操作。

但是,如果使用不当,也会造成很大的麻烦。

例如,当您使用读取功能时,Python会将文件内容一次全部加载到内存中。 如果文件具有10 GB或更多,则计算机将消耗的内存非常大。

对于此问题,您可能会考虑使用readline作为生成器来逐行返回。

但是,如果此文件的内容在一行中,则每行10 GB,您仍将一次读取所有内容。

最优雅的解决方案是使用read方法指定一次只读取固定大小的内容。 例如,在下面的代码中,一次仅返回8kb。

上面的代码在功能上没有问题,但是代码看起来还是有点肿。

使用部分函数和迭代函数,您可以像这样优化代码

总结一下

· 我们可以使用inspect在运行状态下查看源代码

· 如果嵌套循环,可以使用itertools.product

· 随时间使用timeit模块来计算功能或代码段的运行时间

· 使用functool.lru_cache可以加快代码速度。 旨在加快数据采集速度

· 使用atexit模块注册您的功能,以便在导致程序崩溃的任何地方,它将执行您已注册的那些功能

· 通过将大文件分成固定大小的块来读取它

而已! 你学到新东西了吗? 还是您想分享另一个技巧? 请在评论中让我知道!

这是GitHub自述文件的链接,以查看和分析每个技巧

是的 现在就像小min一样享受,我们做到了最后。 希望您学习新东西并对这些有效的开发技巧有一些基本的了解

> Source: Giphy

感谢您的阅读。 不要犹豫,继续关注更多!

(本文翻译自Pawan Jain的文章《Ten Python development skills》,参考:https://towardsdatascience.com/ten-python-development-skills-998a52f8f7c0)

python timeit用法_十大Python开发技巧相关推荐

  1. python培训班排行榜-济南十大python编程培训机构排行榜

    导语概要 信盈达12年专注互联网IT开发人员培养,主要课程有嵌入式培训,物联网培训,单片机培训,Linux课程, ARM课程,Java语言培训, C/C++语言培训,Python培训等,欢迎各位学子来 ...

  2. python调用库有哪些_十大Python机器学习常用库 python开发,你用过几个?

    1.Pipenv Pipenv 是 Kenneth Reitz 的业余项目,旨在将其他软件包(例如 npm 和 yarn)整合到 Python 里.它不需要安装 virtualenv, virtual ...

  3. python 开源项目 书_十大 Python 机器学习开源项目

    1.Scikit-learn 用于数据挖掘和数据分析的简单而有效的工具,基于NumPy,SciPy和matplotlib,开源,商业可用的BSD许可证. Commits: 21486, Contrib ...

  4. python timeit计时_如何使用Python的timeit计时代码段以测试性能?

    我有一个Python脚本,该脚本可以正常工作,但是我需要编写执行时间.我已经用谷歌搜索了,timeit但我似乎无法使其正常工作. 我的Python脚本如下所示: import sys import g ...

  5. python timeit模块_如何在Python中使用timeit模块?

    文 | 菊子皮(转载请注明出处) 关注公众号: AIAS编程有道 环境:Python 3.7,VS Code timeit模块使用 有时候需要测试创建某种变量而花费的时间.有时候需要测试某个函数的运行 ...

  6. python基础网易_十年Python大牛花了三天总结出来的python基础知识实例,超详细!...

    1.在Python 语言中,对象是通过引用传递的. 2.多元赋值,其实就是元组赋值 3.编写模块 4.时刻记住一个事实 5.动态类型 6.变量在内存中是通过引用计数来跟踪管理的 7.异常处理 8.所有 ...

  7. python series用法_如何使用Python中的Series字典创建数据框?

    数据框是一种二维数据结构,其中数据以表格格式存储,以行和列的形式. 它可以可视化为SQL数据表或excel工作表表示形式.可以使用以下构造函数创建它-pd.Dataframe(data, index, ...

  8. python字符串用法_笔记:python字符串的使用

    Python 没有表示单个字符的字符类型,只有字符串类型str.字符串是用单引号或双引号括起来的一系列字符. 单引号表示的字符串中可以包含双引号字符,但不能直接包含单引号字符(否则无法知道字符串的开始 ...

  9. python namedtuple用法_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

最新文章

  1. ASP.NET 2.0中GRIDVIEW排序
  2. 查看python安装路径
  3. wordpress中安装插件需要ftp服务怎么破
  4. spring boot基础教程:入门程序Hello World的编写
  5. bzoj 4278 [ONTAK2015]Tasowanie——后缀数组
  6. SharePoint上传循环添加label并获取上传文件名字的扩展名和文件大小(Session[demo] = new ListLabel();方法实现)...
  7. element ui 组件踩坑记录--后台管理系统-最全
  8. kali linux 中文输入法,Kali Linux安装中文输入法
  9. TypeScript + Gulp + 混淆 + 打包
  10. 04 | 事件调度层:为什么 EventLoop 是 Netty 的精髓?
  11. Ubuntu普通用户使用串口设备
  12. 大数据分析为啥越来越重要
  13. 纯PHP实现定时器任务(Timer)
  14. 虚拟机连接iso后挂载
  15. Android ------ 开源的Modnet算法实现抠图和更换背景
  16. BASIC语言、FreeBasic语言
  17. 数据库MySQL详解(入门学习)
  18. 第二版 手把手教你如何建立自己的Linux系统
  19. 四波混频 matlab,四波混频(four-wave mixing)
  20. centos7里xxx.jar解压和压缩

热门文章

  1. Android WebView常见问题及解决方案汇总【很全很实用】
  2. H5入门-xhtml+css2-第01节
  3. js获取当前日期星期几
  4. Could not obtain connection metadata
  5. 5个经典的javascript面试问题
  6. Flash 杂志《summer tree》 第六期发布
  7. MySQL一张innodb表列个数的限制和engine的选择
  8. Python3安装(Linux)
  9. 每日一题(32)—— 联合体大小
  10. 浏览器访问pdf 的url怎么加密_怎么解决加密的pdf文件?