放假闲暇想写几行代码,心想反正时间充裕不如先看看《google python style guide》挑挑平时写代码时候的错,于是真的发现了数处习惯和知识的漏洞,特此记录。
1. default argument values
python中定义函数可以个参数赋予默认值,默认值可以是字符串,数字,None,当然也可是list [] 或者 dict {}等。当默认值是上述后两者等可变对象(mutable object)的时候可能产生一些问题,这些潜在的问题是由于函数的加载的时候默认参数值会被初始化,而不是每次函数调用的时候。考虑如下代码:
#default arguments values
def f(a, b=1):
pass
#调用
f(1) # b 缺省,使用默认值 1
f(1, b=2) # b 为 2
问题所在:
#default arguments values 是 [] 等可变对象时会产生一些潜在的问题
def f(a, l=[]):
l.append(a)
return l
#调用
f(1)
>>> [1]
f(2)
>>> [1, 2]
f(3)
>>> [1, 2, 3]
#改成如下代码解决
def f(a, l=None):
if not l: l = []
# ...
(此代码参照了 http://blog.csdn.net/delphiwcdj/article/details/5719470 )
2. 空格的使用(whitespace)
代码中适量的空格会是代码格式清晰,更加易读;但过量使用空格也会适得其反,使得阅读、维护成本增高。
2.1 "()", "{}", "[]" 中不要有空格:
Yes: spam(ham[1], {eggs: 2}, [])
No: spam( ham[ 1 ], { eggs: 2 }, [ ] )
2.2 逗号(comma),分号(semicolon),冒号(colon)之前不要有空格,在这些符号的(前提是符号不在行末尾)后面可以有一个空格:
Yes:
if a == b:
print x, y
No:
if a == b :
print x , y
2.3 函数调用、数组选取、dict选取的左括号前不要有空格:
Yes:
spam(1)
list[index] = dict['key']
No:
spam (1)
list [index] = dict ['key']
2.4 >, =, == 等操作符两侧最好有空格,但函数声明的default arguments value 和函数调用传递参数时 = 两侧不要有空格:
Yes:
def f(a=1, b=2):
pass
f(a=3, b=4)
No:
def f(a = 1, b = 2):
pass
f(a = 3, b = 4)
2.5 在一行之内不要用空格控制竖直位置,以免增加维护成本:
Yes:
class AaBb(Entity):
a = Field(String(100), default='aa') # name
b = Field(Integer(8)) #number
No:
class AaBb(Entity):
a = Field(String(100), default='aa') # name
b = Field(Integer(8)) #number
3 有关字符串的一些连接操作:
3.1 两个或几个字符串直接拼接的时候可以用 a + b,否则用'%s, %s.'%(a, b) 更妥;
3.2 循环体内字符串拼接的时候最好先将片段存入数组,再进行 join 拼接。这样可以减少不断的生成临时string 对象从而缩短运行时间。
4 TODO 注释:
没有代码可以一次性写到完美,很多实际情况也确实要求我们暂时只把事情做到80%,所以TODO注释是非常重要的。通过TODO注释可以告诉自己也告诉其他人这部分代码可能在未来某时需要怎么样的改进,以及为何采用现在的暂时性方法。
标准的格式主要为了便于搜索:
# TODO(Zeke): change this to use relations
最后的结束语看过之后也很有触动,为什么要做一份代码编写规范(协议)呢?我们应该怎样做呢?
1. 保持代码所在环境的风格。在已有代码中加入新代码的时候应该先去熟悉现有代码的风格,比如缩进、空格的使用,然后再加入自己的代码,以使得新代码的风格不会显得突兀,从而给阅读者造成困扰;
2. 代码编写规范的意义就在于使别人(或自己)阅读代码的时候专注于代码的内容是什么,而不是这段代码是怎么写的。团队协作尤其需要这些。
3. 最重要的一点:始终如一的坚持某一风格。
-eof-
分享到:
相关推荐
《Python学习笔记》。是一个名为:雨痕的前辈写的。虽然是未完成版,但是读起来很顺畅,于是周末两天,除了逛街就是在读这本书。不到200页的电子书,很快可以读完。 书分为三个部分:Python语言,Python标准库,...
包含<精通python设计模式> 高清pdf 和源码,好资源,与大家分享
网上找到的Goolge Python编码规范。包含两个版本,Google Python Style Guide中文版_li3p.pdf,Google-python-style-guide中文版_guoqiao.pdf。两份文档内容基本一致,guoqiao翻译的格式比较好,带详细书签。
修订记录 <br><br>时间表 <br><br>术语表 <br><br>表格<br><br>5.1 运算符与它们的用法 <br><br>5.2 运算符优先级 <br><br>15.1 一些特殊的方法 <br><br>例子<br><br>3.1 使用带提示符的Python解释器 <br><br>3.2 ...
Python
Python连连看是nautilium朋友为了练习Python与wxPython而编写的一个小游戏。...<br><br><br> <br>安装步骤:<br>直接运行pyllk.py<br><br> <br>测试环境:<br>Ubuntu Feisty<br>Windows XP<br>Windows Vista <br>
包含:Python 2.6.5安装文件 <<简明Python教程>> <<Python入门教程>> pdf
按照《python编程入门经典》学习,过程中所做的笔记和一些程序记录,及其当中遇到的问题和解决方案。
<利用Python进行数据分析>的源代码和数据集
文档整理自下面网址: http://code.google.com/p/zh-google-styleguide/ Google的Python编程风格指南,排版之后便于打印。
Google+Python+Style+Guide中文版.pdf
Chun (陈仲才) 著<br><br>杨涛 王建桥 杨晓云 高文雅 等译<br><br>《Python核心编程》<br><br>原书名:Core Python Programming<br><br>从书名:软件开发技术丛书<br><br>Python是一种不复杂但很健全的编程语言。...
pycrypto为加密解密的python第三方库: 资源文件为pycrypto2.6.1版本,且已经过编译,可以完美适配python3.6版本,主要解决如下问题: 无需依赖Microsoft Visual Studio可以成功安装pycryto库至python3.6中,解决了windows...
网上收集的Goolge Python编码规范。包含两个版本,Google Python Style Guide中文版_li3p.pdf,Google-python-style-guide中文版_guoqiao.pdf。两份文档内容基本一致,guoqiao翻译的格式比较好,而且带详细书签。
<<python编程从入门到实践>>一书中所有实例都有
还有一些有趣的比如说,象下面的一个比较处理,用C语言为: <br/><br/> <br/><br/>if (2<br/><br/>用Python可以表示为<br/><br/>if (2 <br/><br/> <br/><br/>什么是Zope? <br/><br/> <br/><br/>Zope是一个开放源代码...
<<征服PYTHON:语言基础与典型应用>>
青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 在启动IDLE后,看到下列哪一个提示字符,表明已经进入Python Shell交互模式?( ) A. <<< B. >>> C. ...
"<br><br># setup.py<br>from distutils.core import setup<br>import py2exe<br><br>setup(console= ["hello.py"])<br><br>执行: python setup.py py2exe<br><br>执行后会生成一个名为dist的文件夹,在里面可以...