《改善python程序的91个建议》读书笔记(二)编程惯用法

本文是《改善Python程序的91个建议》的读书笔记,重点介绍了利用assert进行问题发现、避免使用中间变量进行数值交换、利用lazy evaluation优化性能、谨慎使用eval防止安全漏洞、正确区分==和is的用法、以及如何有效管理模块和包等方面,旨在提升Python编程的效率和安全性。

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

前言

春节前买了本《编写高质量代码 改善python程序的91个建议》
现在抽空翻翻,做个笔记
共有8个章节
本节是编程惯用法

8、利用assert来发现问题

assert expression1 ["," expression2]

当expression1值为False会引发AssertionError
expression2用来描述异常信息

assert x==y,"not equals"

9、数值交换不推荐使用中间变量

python的数值交换

x,y=y,x

速度要快

10、利用lazy evaluation的特性

仅在真正需要执行时才计算表达式的值

if x and y #x为False则不计算y
if x or y #x为True则不计算y

节省时间

11、理解枚举替代实现的缺陷

这是python3.4以前的事了

12、不推荐使用type进行类型检查

基于内建类型扩展的用户自定义类,type函数不能准确返回结果
古典类中,任意类的实例的type、返回结果都是<type ‘instance’>

13、尽量转换为浮点类型再做除法

这应该是学python的时候都会注意的事
再次声明做个提醒吧

14、警惕eval的安全漏洞

这就类似web注入sql注入等
变量指定不清带来安全隐患

15、使用enumerate获取序列迭代的索引和值

list = ['a','b','c','d','e']
for i,e in enumerate(list):
	print("index:",i,"element:",e)

简洁,且具有一定的lazy

16、分清==与is的适用场景

is是比较两个对象在内存中是否拥有同一块空间
==用来检验两个对象的值是否相等

对于较小的字符串
python会保留值的副本
新的对象建立时指向该副本
于是==与is都返回True

17、考虑兼容性尽可能用Unicode

Unicode被称为万国码
常见的转换方式utf-8对不同范围的字符使用不同长度的编码

不同的编码之间经常产生冲突
所以注意

decode("utf-8")
encode("gbk")

这些编码转换的使用

源文件中注意声明

#!usr/bin/python
# -*- coding:<utf-8> -*-

18、构建合理的包层次来管理module

主要是from import和_init_.py的使用

结语

本节有些建议还不错
注意一下能节省时间减少错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值