千家信息网

有哪些Python开发技巧

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这篇文章主要介绍"有哪些Python开发技巧",在日常操作中,相信很多人在有哪些Python开发技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"有哪些Python开发
千家信息网最后更新 2024年09月22日有哪些Python开发技巧

这篇文章主要介绍"有哪些Python开发技巧",在日常操作中,相信很多人在有哪些Python开发技巧问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"有哪些Python开发技巧"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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

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

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

如果没有IDE怎么办?

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

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

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


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


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

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

  • 类型检查,

  • 获取源代码,

  • 检查类和功能

  • 检查解释器堆栈。

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

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


有没有更快的方法?

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


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

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

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


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

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

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


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

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

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

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

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

代码如下所示:


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

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


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

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

只需一行代码即可使用


结果如下:

2222210.020059824

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

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

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

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

为了达到这个要求,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秒。 速度的提高非常显着。


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

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

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


结果如下:


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

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

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

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

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

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

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

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

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

像这样。


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


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

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

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


输出如下


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


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

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


9. 实施类似延迟的呼叫

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


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

AB

那么Python中有这种机制吗?

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

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


输出如下

AB

10. 如何流式读取大文件

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

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

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

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


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

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


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

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


到此,关于"有哪些Python开发技巧"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

函数 代码 方法 功能 运行 参数 输出 数据 时间 机制 模块 文件 源代码 程序 缓存 问题 开发 一行 上下 上下文 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 cmd怎么进入 数据库 黑龙江整机销售软件开发公司 石林正规软件开发市场价 全境网络技术有限公司 兴化什么是网络技术诚信服务 设备软件开发软件 无法连接到管理服务器 沧州数据库应用中心 军事网络安全上市公司 最新阿里云服务器管理指南 中兴软件开发岗位用什么语言 js获取单个数据库字段 数据库系统工程师2022软考 魔兽怀旧服怎么更改服务器地址 开发数据库用户界面技术栈 网络安全员知识竞赛答案 河南阡陌网络技术有限公司 广东河源网络安全 数据库在网上使用的作用 数据库中与记录相关的命令 莱霸网络技术到底怎么样 互联网科技和信息科技 北京推广网络技术要多少钱 服务器防cc软件 mongod删除数据库 如何防止误删数据库 阿里云服务器下载速度多少 麦肯锡数据库微盘 汇丰软件开发有限公司新地址 安徽公安厅网络安全保卫总队
0