编写高质量代码——改善Python程序的91个建议(Ⅱ)(最优化python编程)

网友投稿 267 2022-08-27


编写高质量代码——改善Python程序的91个建议(Ⅱ)(最优化python编程)

建议8:利用assert语句来发现问题Python并没有严格定义调式和发布模式之间的区别,通常禁用断言 的方法是在运行脚本的时候加上-O标志。

不要滥用,通常用在正常逻辑不可到达的地方或正常情况下总是为真的场合。如果Python本身的异常能够处理就不要再使用断言。不要使用断言来检查用户的输入。在函数调用后,当需要确认返回值是否合理时可以使用断言。当条件是业务逻辑继续下去的先决条件时可以使用断言。

建议9:数据交换时不推荐使用中间变量

x, y = y, x 性能更优。 其在内存中执行的顺序如下:

先计算右边的表达式y,x,因此先在内存中创建元组(y,x),其标识符和值分别为y、x及其对应的值,其中y和x是在初始化时已经存在于内存中的对象。计算表达式左边的值并进行赋值,元组被依次分配给左边的标识符,通过解压缩,元组第一标识符(y)分配给左边第一个元素(x),元组的第二个标识符(x)分配给第二个元素(y),从而达到x、y交换的目的。

建议10:充分利用Lazy evaluation的特性Lazy evaluation即“延迟计算”或者“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。

避免不必要的计算,带来性能上的提升。比如:if x and y 和 if x or y。生成器表达式。

def fib(): a,b = 0, 1 while True: yield a a, b = b, a + b

建议11:理解枚举替代实现的缺陷这块没怎么看懂。建议12:不推荐使用type来进行类型检查

不刻意进行类型检查,而是在出错的情况下通过抛出异常来进行处理,这是较为常见方式。基于内建类型扩展的用户自定义类型,type函数并不能准确返回结果。如果类型有对应的工厂函数,可以使用工厂函数做相应转换,如list(listing)、str(name)等,否则可以使用isinstance()函数来检查。

建议13:尽量转换为浮点类型后再做除法

当涉及除法运算时先将操作数转换为浮点类型再做运算(Python3.x不存在此问题)。浮点数会不精确?

i = 1while i != 1.5: i += 0.1 print(i)

很可能会无限循环。 循环条件尽可能设置为整数。

建议14:警惕eval()的安全漏洞python中eval()函数将字符串str当成有效的表达式来求值并返回计算结果,这就有空可钻。

在实际应用过程中如果对象不是信任源,应该尽量避免使用eval,在需要使用eval的地方可用安全性更好的ast.literal_eval替代。使用enumerate()获取序列迭代的索引和值 代码清晰简洁,可读性好。函数返回本质上为一个迭代器。

li = [1,2,3,4,5,6]for i, e in enumerate(li): print("index:",i,"element:",e)

在使用字典获取key, value时,使用iteritems()方法。

建议16:分清 == 与 is

操作符

意 义

is

object identity

==

equal

is: 用来检测两个对象在内存中是否拥有同一块内存空间(相当于id(x)==id(y)) ==: 检测两个值是否相等

建议17:考虑兼容性,尽可能使用Unicode

str.decode([ 编码参数 [, 错误处理]] )str.encode([ 编码参数 [, 错误处理]] )

码参数

描述

‘ascii’

7位ASCII码

‘latin-1’ or ‘iso-8859-1’

ISO 8859-1, Latin-1

‘utf-8’

8位可变长度编码

‘utf-16’

16位可变长度编码

‘utf-26-le’

UTF-16, little-endian编码

‘utf-16-b’

UTF-16, big-endian编码

‘unicode-escape’

与unicode文字u’string’相同

‘raw-unicode-escape’

与原始unicode文字ur‘string’相同

总之,是个好复杂的问题…

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

- 《编写高质量代码 改善Python程序的91个建议》张颖 赖勇浩 著。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python绘制图像(Matplotlib)(Ⅳ)(matplotlib绘制图形)
下一篇:Python绘制图像(Matplotlib)(Ⅴ)(python用matplot画图)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~