python——Tips for Effective Python,编写高质量python的有效方法(注意点),持续更新ing。。。

本文介绍了有效提升Python代码质量的多个方面,包括使用Pythonic方式思考,如理解bytes、str和unicode的区别,用辅助函数简化复杂表达式,合理使用切片操作。还涉及函数的最佳实践,如利用异常代替None,使用生成器,以及在类和继承中使用classmethod、super()等。此外,探讨了元类和属性的使用,如纯属性和描述符。通过遵循这些技巧,可以编写出更高效、易读的Python代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

针对每条注意点的细节,可以给本篇博客评论,博主本人会针对评论给出示例或相应讲解。
外文文献可参考:Effective Python——59 Specific Ways to Write Better Python, author by Brett Slatkin.

用 Pythonic 方式来思考

1. 了解 bytes、str 和 unicode 的区别
  • python 3 中,bytes 是一种包含8位值得序列,str 是一种包含Unicode字符的序列,开发者不能以>或+等操作符来混同操作 bytes 和 str 示例。
  • python 2 中,str 是一种包含8位值的序列,unicode 是一种包含 Unicode 字符的序列。如果 str 只含有 7 位 ASCII 字符,那么可以通过相关的操作符来同时使用 str 和 unicode。
  • 在对输入的数据进行操作之前,使用辅助函数来保证字符序列的类型与开发者的期望相符。
  • 从文件中读取二进制数据,或向其中写入二进制数据时,总应该以 ‘rb’ 或 ‘wb’ 等二进制模式来开启文件。
2. 用辅助函数来取代复杂的表达式
  • 开发者很容易过度运用Python的语法特性,从而写出那种特别复杂并且南艺理解的单行表达式
  • 请把复杂表达式一如辅助函数中,如果要反复使用相同的逻辑,那就更应该这么做。
  • 使用 if/else 表达式,要比用 or 或者 and 这样的 Boolean 操作符写成的表达式更加清晰。
3. 了解切割序列的方法
  • 不要写多月的代码:当 start 索引为0,或 end 索引为序列长度时,应该将其省略。
  • 切片操作不会计较 start 与 end 索引是否越界,这使得我们很容易就能从序列的前端或后端开始,对其进行范围固定的切片操作(如 a[:20] 或 a[-20:])
  • 对 list 赋值的时候,如果使用切片操作,就会把原列表中处在相关范围内的值替换成新值,即便它们的长度不同也依然可以替换。
4. 在单次切片操作内,不要同时指定 start、end 和 stride
  • 既有 start 和 end,又有 stride 的切割操作,可能会另人费解。
  • 尽量使用 stride 为正数,且不带 start 和 end 索引的切割操作。尽量避免负数作为 stride 。
  • 在同一个切片操作内,不要同时使用 start 、end 和 stride。如果确实需要执行这种操作,那就考虑将其拆解为两条赋值语句,其中一条做范围切割,另一条做步进切割,或考虑使用内置 itertools 模块中的 islice。
5. 用列表推导取代 map 和 filter
  • 列表推导要比内置的 map 和 filter 函数清晰,因为它无需额外编写 lambda 表达式。
  • 列表推导可以跳过输入列表中某些元素,如果改用 map 来做,那就必须以 filter 方能实现。
  • 字典与集合也支持推导表达式。
6. 不要使用含两个以上表达式的列表推导
  • 列表提到支持多级循环,每一级循环也支持多项条件。
  • 超过两个表达式的列表推导是很难理解的,应该尽量避免。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值