一、条件分支语句惯用写法
1、不要显式地与布尔值做比较(if condition == True
,这样写太蠢了!)
2、利用类型本身的布尔值规则,省略零值判断。
3、把not
代表的否定逻辑移入表达式内部。
4、仅在需要判断某个对象是否为None
、True
、False
时,使用is
运算符。
二、Python数据模型
1、定义__len__
和__bool__
魔法方法,可以自定义对象的布尔值规则。
2、定义__eq__
方法,可以修改对象在进行==
运算时的行为。
三、代码可读性技巧
1、不同分支内容易出现重复或者类似的代码,将它们抽离到分支外可以提升代码的可读性。
2、使用德摩根定律——not A or not B等价于not (A and B) 可以让多重否定的表达式变得更容易理解。
四、代码可维护性技巧
1、尽可能让三元表达式保持简单。
2、扁平优于嵌套:使用提前返回优化代码中的多层分支嵌套。
3、当条件表达式变得特别复杂时,可以尝试封装新的函数和方法来简化。
4、and
的优先级比or
高,不要忘记使用括号让逻辑更加清晰。
5、在使用or
运算符替代条件分支时,请注意避开因布尔值运算导致的陷阱:
context = {} if extra_context is ot None: context.update(extra_context) 上述代码可以简化为: context.update(extra_context of {}) 所谓陷阱则是指: timeout = config.timeout or 60 本身我们希望判断None,但是config.timeout为0的情况却被忽略并错误的配置为60
五、代码组织技巧
1、bisect
模块可以用来优化范围类分支判断。
2、字典类型可以用来替代简单的条件分支语句。
3、尝试总结分支代码里的规律,用更精简、更易扩展的方式改写它们。
4、使用any()
和all()
内置函数可以让条件表达式变得更精简。
参考内容:《Python工匠——案例、技巧与工程实践》