关于编写高质量的Python代码有感
来源:互联网 发布:海岛奇兵火箭炮手数据 编辑:程序博客网 时间:2024/05/16 06:21
最近在整理新项目在Robot上的模块级测试项目的应用库,真的是感慨芬兰的员工的代码质量真的让国内的人汗颜。设计简洁,代码高效优美,不仅仅为了完成当前的工作,为未来的接口也做了适当的设计。
其实一段代码既可以为了完成任务草草完事,也可以精益求精,完全取决于一个程序员是否对自己有要求。记得在之前的测试开发项目组,曾经做过一个脚本开发的统一模板,目的为了更好的提高单个module的质量,同时方便被其他module函数重用。
今天看Robot Framework的源码,才知道什么才是高质量的开源代码,每一个函数和类的设计都尽可能的清晰和简单,此外还需要开率代码的以下单个特性:可测性,封装性,兼容性。
可测性:
Python本身有很好用的单元测试库,但是最好在每个模块内部都进行必要的简单测试。因此在'__main__'判断的条件分支内可以区分运行测试代码或者被其他模块调用。
常见的Main函数入口为例说明如下:
# Check if running as a program
if __name__ == '__main__':
# Always run testing or examples for current module
statements
else:
# call by other modules
statements for who import your library
当然,这样是为了编写的模块被其他模块调用而设计的。如果你仅仅是单独的模块应用大可不必这样,这完全取决于你的场景。但是话说回来,我们每一段代码如果都考虑到未来的扩展性和易用性,这样才是高质量的代码。
封装性:
Python编码必须要考虑到Module和Packege的封装性,不应该把所有的函数和数据都对外暴露。
举例开说,从封装性角度,适当的考虑使用'__all__'变量也是非常好的习惯:
#
__all__ = [ 'function_name_or_parameter_1', 'function_name_or_parameter_2']
兼容性:
最常遇到的兼容性问题包括版本兼容性和系统兼容性。下面以版本兼容性为例说明,如何编写更加健壮的代码:
try:
from urllib.request import urlopen # Python 3
except ImportError:
from urllib2 import urlopen # Python 2
u = urlopen("ftp://username:password@somehostname/somefile")
contents = u.read()
对于常见的一般的应用,做到这三点基本上可以保证代码的质量。但是如果对于较大的Python编写的项目,还需要考虑更多的因素,毕竟Python从语法的严谨性上没有C++/Java那么好,还有很多的隐式属性会对初学者有很多的影响,因此想要写出好的Python库或者工具,还需要不断的读有些的开源代码总结经验和教训。
0 0
- 关于编写高质量的Python代码有感
- 编写高质量的代码
- 编写高质量的代码
- 用 Python 编写干净、可测试、高质量的代码
- 用Python编写干净 可测试 高质量的代码
- 用Python编写干净 可测试 高质量的代码
- 【css】谈谈 css 的各种居中——读编写高质量代码有感
- 读书笔记《编写高质量代码》高质量的HTML
- 编写高质量代码
- 编写高质量代码
- 如何编写高质量的VB代码
- 如何编写高质量的VB代码
- 如何编写高质量的VB6代码
- 如何编写高质量的VB代码
- 如何编写高质量的VB代码
- 编写高质量的VB代码
- 如何编写高质量的VB代码
- 如何编写高质量的VB代码
- KVO
- Set to nil in viewDidUnload, but release in dealloc
- OC遍历属性
- Android代码优化——使用Android lint工具
- Dynamic coding in Objective C
- 关于编写高质量的Python代码有感
- Creating custom UITableViewCell's within a Storyboard
- Beginning Storyboards in iOS 5 P…
- UISegmentedControl custom color
- 傅里叶变换有什么用?
- 【讨论】为什么不去读顶级会议上的论文?适应于机器学习、计算机视觉和人工智能
- 后勤数据源中两个十分重要的表
- ViewFlipper and ViewAnimator
- ios中常用的线程同步策略-synchronize …