Spring aware接口的作用是什么
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~