python编程规范系列--建议01~07
本系列来自《编写高质量代码 改善python程序的91个建议》的读书笔记整理。
本书主要内容
1)容易被忽视的重要概念和常识,如代码的布局和编写函数的原则等;
2)编写python程序管用的方法,如利用assert语句去发现问题,使用enumerate()获取序列迭代的索引和值等;
3)语法中的关键条款,如有节制地使用from…import语句,异常处理的几点基本原则等;
4)常见库的使用,如按需选择sort()或者sorted(),使用Queue使多线程更安全等;
5)python设计模式的使用,如用发布订阅模式实现松耦合,用状态模式美化代码等;
6)python内部机制,如名字查找机制,描述符机制等;
7)开发工具的使用,如pip等各种开发工具的使用,各种代码测试用具的使用等;
8)python代码的性能分析,优化的原则,工具,技巧,以及常见性能问题的解决等。
本章主要内容
建议1:理解pythonic概念
建议2:编写pythonic代码
建议3:理解python与C语言的不同之处
建议4:在代码中适当添加注释
建议5:通过适当添加空行使代码布局更为优雅,合理
建议6:编写函数的4个原则
建议7:将常量集中到一个文件
建议1:理解pythonic概念
1)pythonic:充分体现python自身特色的代码风格。
2)举例:
1 # 交换两个变量的值,packaging/unpackaging机制 2 x = 2 3 y = 3 4 x, y = y, x 5 print x, y
1 # 字符串格式化 2 print 'Hello %(name)s!' % {'name': 'Tom'}
1 # 字符串格式化 2 print 'Hello {name}!'.format(name='Tom')
3)python的包和模块结构: (1) 包和模块的命名采用小写,单数形式且短小;(2)包通常作为命名空间,如只包含空的__init__.py文件。
建议2:编写pythonic代码
1)要避免劣化代码:(1)避免只用大小写来区分不同的对象;(2)避免使用容易引起混淆的名称;(3)不要害怕过长的变量名;
2)pep8检测工具:
1 C:\>pip install -U pep8 2 3 C:\Users\Administrator\Desktop\zxt>pep8 --first database.py 4 database.py:83:1: E302 expected 2 blank lines, found 1 5 6 >pep8 --show-source --show-pep8 waijiao.py
建议3:理解python与C语言的不同之处
1)缩进与{}
2)'与"
3)三元操作符?:
4)switch...case
1 n = raw_input("please input a number:") 2 if n == "0": 3 print "You typed zero." 4 elif n == "1": 5 print "You are in top." 6 elif n == "2": 7 print "N is an even number." 8 else: 9 print "Error!"
用跳转可以实现:
1 def func(): 2 return { 3 "0": "You typed zero.", 4 "1": "You are in top.", 5 "2": "N is an even number." 6 }.get(n, "Error!")
建议4:在代码中适当添加注释
1)使用块或者行注释的时候仅注释复杂的操作,算法,难以理解的技巧或者不够一目了然的代码;
2)注释和代码隔开一定的距离;
3)给外部可访问的函数和方法添加文档注释(ddocstring)(""" """);
4)推荐文件头部包含copyright申明。模块描述等。
1 """ 2 Requests HTTP library 3 ~~~~~~~~~~~~~~~~~~~~~ 4 Requests is an HTTP library, written in Python, for human beings. Basic GET 5 usage: 6 >>> import requests 7 >>> r = requests.get('https://www.python.org') 8 >>> r.status_code 9 200 10 >>> 'Python is a programming language' in r.content 11 True 12 ... or POST: 13 >>> payload = dict(key1='value1', key2='value2') 14 >>> r = requests.post('http://httpbin.org/post', data=payload) 15 >>> print(r.text) 16 { 17 ... 18 "form": { 19 "key2": "value2", 20 "key1": "value1" 21 }, 22 ... 23 } 24 The other HTTP methods are supported - see `requests.api`. Full documentation 25 is at <http://python-requests.org>. 26 :copyright: (c) 2015 by Kenneth Reitz. 27 :license: Apache 2.0, see LICENSE for more details. 28 """
建议5:通过适当添加空行使代码布局更为优雅,合理
1)在一组代码表达完一个完整的思路之后,应该用空白进行间隔;
2)尽量保持上下文语义的易理解性(如调用函数写在被调用函数之上);
3)避免过长的代码行,每行最好不要超过80个字符;
4)不要为了保持水平对齐而使用多余的空格;
5)空格是使用要能在需要强调的时候警示读者:
(1)二元运算符的左右两边应该有空格;
(2)逗号和分号前不要使用空格;
(3)函数名和左右括号之间,序列索引操作时序列名和[ ]之间不要空格,函数默认参数两侧不需要空格;
(4)强调前面的操作符的时候使用空格。
建议6:编写函数的4个原则
1)函数设计尽量短小,嵌套层次不宜过深(最好控制在3层以内);
2)函数声明应该做到合理,简单,易于使用;
3)函数参数设计应该考虑向下兼容;
4)一个函数只做一件事,尽量保证函数语句粒度的一致性。
建议7:将常量集中到一个文件
示例:const.py
1 # -*-coding:UTF-8 -*- 2 3 import sys 4 5 6 class _const(object): 7 8 class ConstError(TypeError): 9 pass 10 11 class ConstCaseError(ConstError): 12 pass 13 14 def __setattr__(self, name, value): 15 if self.__dict__.has_key(name): 16 raise self.ConstError, "Can't change const.{name}".format(name=name) 17 if not name.isupper(): 18 raise self.ConstCaseError, 'const name "{name}" is not all uppercase'.format(name=name) 19 self.__dict__[name] = value 20 21 22 sys.modules[__name__] = _const()
PS:如果你觉得文章对你有所帮助,别忘了推荐或者分享,因为有你的支持,才是我续写下篇的动力和源泉!
出处: http://www.cnblogs.com/zhangbc/
格言: 我愿意做一只蜗牛,慢慢地向前爬,不退缩,不泄气,做好自己,立足当下,展望未来!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。