Python | 新手必会的 9 个 Python 技巧

GH从0开始学python-1part 记录一下自己从0开始的学习python的过程,希望大家批评指正! 阅读详情

英文原文:https://martinheinz.dev/blog/1
译者:测试

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。

清理字符串输入

对用户输入进行清理的问题几乎适用于您编写的所有程序。通常情况下,将字符转换为小写或大写就足够了,有时您可以使用Regex来完成这项工作,但对于复杂的情况来说,可能有更好的方法:

在本例中,您可以看到空白字符“\n”和“\t”已被单个空格替换,而“\r”已被完全删除。这是一个简单的例子,但是我们可以更进一步,使用unicodedata包和它的combining()函数来生成并进行映射,从而生成更大的重新映射表,我们可以使用它来删除字符串中的所有重音。

对迭代器进行切片

如果您尝试对一个迭代器进行切片,您会得到一个TypeError,这说明生成器对象是不可下标访问的,但有一个简单的解决方案可以解决这个问题:


使用itertools.islice我们可以创建一个islice对象,它是一个会生成所需项的迭代器。需要注意的是,这将消耗slice开始之前的所有生成器项,以及islice对象中的所有项。

跳过可迭代对象的开始部分

有时您必须处理那些以您不想要的可变数量的行(如注释)开始的文件。itertools再次为这个问题提供了简单的解决方案:

这代码段只生成初始注释部分之后的行。如果我们只想在可迭代对象的开头丢弃一些项目(本例中是一些行),并且不知道有多少个项目,那么这种方法是很有用的。

只带有关键字参数(kwargs)的函数

在使用以下这样的函数时,创建只接受关键字参数的函数来提供(强制)更多的清晰性是很有帮助的:

正如您所看到的,这可以通过在关键字参数之前放置单个*参数来轻松解决。如果我们把位置参数放在*参数之前,位置参数显然也会存在。

创建支持with语句的对象

例如,我们都知道如何使用with语句来打开文件或获取锁,但是我们可以实现自己的with语句吗? 当然,我们可以使用__enter__和__exit__方法来实现上下文管理协议:

这是在Python中实现上下文管理最常见的方法,但是还有更简单的实现方法:

上面的代码片段使用contextmanager管理器装饰器实现了内容管理协议。在进入with块时,tag函数(在yield之前)的第一部分会被执行,然后该with块被执行,最后,tag函数的其余部分会被执行。

使用__slots__节省内存

如果您曾经编写过一个创建某个类的大量实例的程序,您可能会注意到您的程序会突然需要大量内存。这是因为Python使用字典来表示类实例的属性,这使得它的速度很快,但是内存效率不高,这通常并不是一个问题。然而,如果它成为您的程序的一个问题时,您可以尝试使用__slots__:

这里的情况是,当我们定义了__slots__属性时,Python会使用小的固定大小的数组而不是字典来定义属性,这大大减少了每个实例所需的内存。使用__slots__也有一些缺点——我们不能声明任何新的属性,并且我们只能使用在__slots__上这些属性。而且,带有__slots__的类不能使用多重继承。

限制CPU和内存的使用

如果您不想优化您的程序内存或CPU使用,您只想把它限制在某个固定大小的内存上,那么Python也有一个这样的库来做到这一点:

这里我们可以看到设置最大CPU运行时间和最大内存使用限制的两个选项。对于CPU限制,我们首先获取特定资源(RLIMIT_CPU)的软限制和硬限制,然后使用参数指定的秒数和前面检索到的硬限制来设置它。最后,我们注册信号,如果CPU时间超过限制,该信号会导致系统退出。对于内存,我们再次检索软限制和硬限制,并使用带有大小参数的setrlimit和检索的硬限制来设置它。

控制什么可以导入,什么不可以导入

一些语言有非常明显的导出成员(变量、方法、接口)的控制机制,例如Golang,其中只有以大写字母开头的成员会被导出。另一方面,在Python中,所有东西都可以被导出,除非我们使用__all__:

根据上面的代码片段,我们知道只有bar函数会被导出。同样,我们可以让__all__为空,这样,当我们从这个模块导入的时候,任何东西都不会被导出,并且会导致AttributeError。

实现比较运算符的简单方式

考虑到目前已经有相当多的比较操作符——__lt__ 、__le__ 、 __gt__  或 __ge___,因此,为一个类实现所有的比较操作符是相当烦人的。但如果有更简单的方法可以实现呢?functools.total_ordering就派上用场了:

那么,这到底是怎么工作的呢?total_ordering装饰器用于简化实现类实例排序的过程。我们只需要定义__lt__和__eq__,它们是剩余操作的映射所需的最小值,装饰器就会为我们填充空白。

结论

并不是所有这些特性在日常的Python编程中都是必需的和有用的,但是它们中的一些可能会不时地派上用场,而且它们还可能会简化那些在其他情况下会非常冗长和难以实现的任务。我也想说明的是,所有这些特性是Python标准库的一部分,而其中的一些在我看来就像标准库中所具有的相当不标准的东西,所以当您想使用Python实现某些东西的时候,您首先应该去标准库中寻找它,如果您不能找到它,那么您可能还是不够努力(如果真的没有,那它肯定在一些第三方库中)。

欢迎扫码关注:

python如何访问 Python 模块中的元数据(metadata) 总之,importlib_metadata 是一个非常方便的 Python 库,可以帮助我们访问 Python 模块中的元数据,并更好地管理模块的版本和依赖项。在这个示例中,我们使用 importlib_metadata.requires() 函数访问名为 mypackage 的 Python 模块的依赖项信息。在这个示例中,我们使用 importlib_metadata.metadata() 函数访问名为 mypackage 的 Python 模块的所有元数据。 阅读详情

相关推荐

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 733

Python简介

缩进 Python以缩进表达程序的格式框架,所以要严格控制缩进,一般是4个空格,或者一个 tab 键。注意:在 Python 开发中,Tab 和空格不要混用! 注释 单行注释: # 追加说明文字 注意:尽量在文字前面打个空格 在# 号前面需要追加两个空格。例如 print() # 注释 多行注释语法: """ ...

guo_qingxia的博客 1861

小红书UID泄露风险揭秘:如何防止你的手机号被社工库关联(附防护指南)

本文揭示了小红书UID泄露的严重风险,详细解析了UID与手机号关联后被社工库利用的完整链条。通过分析黑产的数据整合技术,提供从基础到进阶的防护策略,包括密码管理、账号隔离和应急响应措施,帮助用户有效防范个人信息泄露风险。

ol789012345的博客 1517

9个不为人知的Python技巧

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地...

小詹学python的博客 327

第01章 Hermes Agent 是什么

如果读者所在的开发团队已经引入了 Cursor、Claude Code 这类 AI IDE,可能会有一个困惑:写代码已经有 AI 帮忙了,还需要 Hermes Agent 做什么?这一章将给出答案。Hermes Agent 不是另一个写代码的 AI,而是一个常驻在团队里的"AI 协作成员",专门负责写代码之外的协作环节——讨论需求、审查代码、查日志、监控告警、生成报告。学完本章,读者将清楚 Hermes 的定位以及它在团队里的角色。

亢少军的博客 76

部署与可视化系统:移动端落地保姆级教程:YOLOv8 转换为 NCNN 并封装进 Android App 调用摄像头实时检测

本文介绍了在移动端部署YOLOv8模型的最佳实践。通过实测数据对比,采用NCNN框架在骁龙865设备上可实现35+FPS的实时推理性能。文章详细分析了NCNN相比TFLite、MNN等框架的优势,包括更高的ARM CPU性能、更优的Vulkan GPU加速和更小的模型体积。同时提供了从PyTorch模型到NCNN格式的完整转换流程,包括FP16优化和INT8量化方法,并重点解析了YOLOv8特有的输出格式处理要点。建议开发者先在Python环境验证NCNN推理流程,再部署到Android平台,以确保最佳性能

ZXSXJ的博客 210

(笔记)Python 函数 元数据

由于Python是一门解释型语言,在Python中定义变量不需要指明类型,所以当我们在编写函数时,可以为函数的参数添加一些额外的信息来指明变量类型,以方便其他人使用。 因此,可以使用函数参数注解来提示使用者传入变量的类型。 例如: def Test(a:int,b:float)->float: return a*b print(Test(1,2.7)) print(Test.__annotations__) Res...

Hanlin的博客 1665

《FreeRTOS 入门与实战》第2章:开发环境搭建(实战)

STM32CubeIDE工程创建与FreeRTOS移植J-Link调试环境搭建SystemView可视化跟踪配置。

2301_79143213的博客 1733

新手必会的 9 个 Python 技巧!

英文原文:https://martinheinz.dev/blog/1译者:测试有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,...

机器学习算法那些事 267

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

QGis软件 —— 5、QGis增加线,并对线进行绘制、旋转、缩放、移动等基本操作

8246

北斗导航 | 卡尔曼滤波与因子图优化对比(附图优化matlab代码)

- 历史数据利用:因子图通过滑动窗口保留历史状态,优化时联合多帧数据;卡尔曼滤波仅依赖当前和上一帧状态 。 - 迭代优化:因子图通过多次迭代逼近最优解,卡尔曼滤波仅单次更新 。 - 误差抑制:因子图的多次线性化可有效抑制非线性误差(如GNSS伪距观测的非线性) 。

尘世冰封的专栏 1307

【实用】新手必知必会的 9 个 Python 技巧!

英文原文:https://martinheinz.dev/blog/1有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东...

lsxxx2011的专栏 189

YOLOv8/v9 遥感图像目标检测实战指南:建筑物检测与变化监测

遥感图像在城市规划、灾害评估、农业监管等领域应用广泛,但传统目标检测方法存在效率低、精度不足、难以适配遥感图像大尺寸、多尺度目标等问题。本文以“建筑物检测与变化监测”为核心,基于DOTA、NWPU VHR-10等公开数据集,系统讲解YOLOv8/v9在遥感图像中的实战流程。从数据获取、格式转换、模型训练优化,到大图切片推理、建筑物变化监测,全程提供可复现的代码与参数配置。通过针对性优化(旋转增强、切片推理等),模型在NWPU VHR-10数据集上mAP50达0.85以上,可适配卫星影像、无人机航拍等多场景

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 520

Python编程 | 新手必会的 9 个 Python 技巧

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。 清理字符串输入 对用户输入进行清理的问题几乎适用于您编写的所有程序。通常情况下,将字符转换为小写或大写就足够了,有时您可以使用Regex来完成这项工作,但对于复杂的情况来说,可能有更好的方法: 在本例中,您可以看到空白字符“\n”和“\t”已被单个空格替换,而“\r”已被完全...

186

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

python编程口诀_Python编程|新手必会的9个Python技巧

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。这里要注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的...

weixin_39969340的博客 1768

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

用python实现汇编功能_编程语言新手必会的9个Python技巧

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。清理字符串输入对用户输入进行清理的问题几乎适用于您编写的所有程序。通常情况下,将字符转换为小写或大写就足够了,有时您可以使用Regex来完成这项工作,但对于复杂的情况来说,可能有更...

weixin_39569543的博客 929

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

python时间比较大小_新手必会的9个Python技巧!

转载 | python那些事编辑 | 雷课小雷图 | 来源网络有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。清理字符串输入对用户输入进行清理的问题几乎适用于您编写的所有程序。通常情况下,将字符转换为小写或大写就足够了...

weixin_39672572的博客 129

python时间比较大小_Python | 新手必会的 9 个 Python 技巧

点击上方“恋习Python”,选择“加为星标”第一时间学习Python技术干货!英文原文:https://martinheinz.dev/blog/1译者:测试有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。清理字符串...

weixin_39827506的博客 220

python时间比较大小_Python编程|新手必会的9个Python技巧

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。这里要注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费答疑.裙 :七衣衣九七七巴而五(数字的谐音)转换下可以找到了,不懂的...

weixin_39522698的博客 225

python变量在使用前、必须先______9 个Python新手必知必会的技巧!

有很多介绍Python中各种很酷的功能(如变量拆包、偏函数、枚举可迭代对象)的文章,但说到Python时,还有很多东西可以谈论,这里我将尝试展示我所知道和使用的一些特性,我还没有在其他地方看到有人提到过它们。我们开始吧。1.清理字符串输入对用户输入进行清理的问题几乎适用于您编写的所有程序。通常情况下,将字符转换为小写或大写就足够了,有时您可以使用Regex来完成这项工作,但对于复杂的情况来说,可能...

weixin_39833454的博客 426
上一篇: 「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
下一篇: 10个必会的 PyCharm 技巧
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值