【Python编码规范】编程惯用法

本文介绍了Python编程的多个建议,包括使用assert语句进行问题检测,避免使用中间变量交换数据,利用lazy evaluation提升性能,理解枚举的替代实现缺陷,不推荐使用type进行类型检查,转换为浮点数进行除法运算,警惕eval的安全风险,使用enumerate获取序列索引和值,区分__eq__与id的区别,使用Unicode确保兼容性,并提倡构建合理的包结构来管理模块。这些实践有助于提高代码质量和可读性。
摘要由CSDN通过智能技术生成

本系列为《编写高质量代码-改善Python程序的91个建议》的读书笔记。

温馨提醒:在阅读本书之前,强烈建议先仔细阅读:PEP规范,增强代码的可阅读性,配合优雅的pycharm编辑器(开启pep8检查)写出规范代码,是Python入门的第一步。

建议8:利用assert语句来发现问题

  • 断言(assert)基本语法如下:
assert expression1 ["," expression2]
  • assert用法举例:
>>> x = 1
>>> y = 2
>>> assert x == y , "not equals"
Traceback (most recent call last):
  File "<input>", line 1, in <module>
AssertionError: not equals
  • 关于assert的几点说明事项

1)__debug__的值默认为True,且只读,无法修改(Python2.7)。
2)断言是有代价的,对性能产生一定影响。禁用断言的方法是在运行脚本的时候加上-O标记(不优化字节码,而是忽略与断言相关的语句)。

  • 使用断言(assert)注意点:

1)不要滥用,这是使用断言最基本的原则;
2)如果Python本身的异常能够处理就不要再使用断言;
3)不要使用断言来检查用户的输入;
4)在函数调用后,当需要确认返回值是否合理时可以使用断言;
5)当条件时业务逻辑继续下去的先决条件时,可以使用断言。

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

>>> from timeit import Timer
>>> Timer('temp=x;x=y;y=temp','x=2;y=3').timeit()
0.03472399711608887
>>> Timer('x,y=y,x','x=2;y=3').timeit()
0.031581878662109375
  • 测试用例说明:不借助中间变量的方式耗费的时间更少,代码简洁,值得推荐。

建议10:充分利用Lazy evaluation的特性

Lazy evaluation常被译作“延时计算”或“惰性计算”,指的是仅仅在真正需要执行的时候才计算表达式的值。典型例子:生成器表达式。

1)避免不必要的计算,带来性能上的提升;
2)节省空间,使用无限循环的数据结构成为可能。

  • 实例:
#!/usr/bin/env python
# coding:utf-8


from itertools import islice


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

        a, b = b, a+b


if __name__ == '__main__':

    print(list(islice(fib(), 5)))

建议11:理解枚举替代实现的缺陷

1)替代方法

  • 使用类属性
>>> class Seasons(object):
...     Spring, Summer, Autumn, Winter = xrange(4)
... 
>>> print(Seasons.Spring)
0
  • 借助函数
>>> def enum(*args, **kwargs):
...     return type("Enum", (object,), dict(zip(args, xrange(len(args))), **kwargs))
... 
>>> Seasons = enum("Spring", "Summer", "Autumn", Winter
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值