北京网站设计制作哪家好,网站中捕获鼠标位置,网站开发 商城开发,wordpress 站点语言Python开发指南, 超级实用足以让您震撼 Photo by Christina Morillo from StockSnap时不时地#xff0c;当我了解Python的新功能时#xff0c;或者我发现其他一些人不知道该功能时#xff0c;我会记下它。在过去的几周中#xff0c;我最近了解或实现了一些有趣的功能-S…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.02005982406.使用内置的缓存机制来提高效率缓存是一种存储定量数据以满足后续采集需求的方法旨在加快数据采集的速度。数据生成过程可能需要诸如计算正则化和远程获取之类的操作。 如果同一数据需要多次使用则每次重新生成都将浪费时间。因此如果将通过诸如计算或远程请求之类的操作获得的数据进行缓存则将加速后续的数据获取需求。为了达到这个要求Python 3.2为我们提供了一种易于实现的机制而无需您编写这样的逻辑代码。该机制是在functool模块的lru_cache装饰器中实现的。参数解释· maxsize此函数调用最多可以缓存多少个结果如果为None则没有限制设置为2的幂时性能最佳· 类型如果为True则将分别缓存不同参数类型的调用。例如输出如下您可以看到第二个调用不执行函数主体而是直接将结果返回到缓存中calculating: 1 233calculating: 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上下文管理器来达到这种效果输出如下AB10.如何流式读取大文件使用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)