放假闲暇想写几行代码,心想反正时间充裕不如先看看《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 = []

# ...

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-

0

3

分享到:

2011-10-04 22:21

浏览 1393

评论

google python style guide_读lt;google python style guidegt;几点记录 - 毛头明月耍大刀 - ITeye博客...相关推荐

  1. python读取文件读不出来-python文件读取失败怎么处理

    在读取文件时候比如读取 xxx.csv 时候 可能报编码错误 类似于 'xxx' codec can't decode byte 0xac in position 211: illegal multi ...

  2. 编程软件python下载怎么读-怎么学python编程语言,他说,你需要这个工具

    懂中文你就能学会python,但你需要一些靠谱的工具. python作为一门十分容易上手的编程语言,连小学生都在学习,所以,不管你是从事什么工作,都可以学会这门编程语言. 那么作为初学者,如何才能有效 ...

  3. python禅怎么读_python学习——python之禅

    (一)python之禅: 在python中运行import this你会看到这样一段文字: The Zen of Python, by Tim Peters Beautiful is better t ...

  4. python中answer是什么意思_用Python实现的quot;石头,剪刀,布quot; - The answer to everything - ITeye博客...

    需求:设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势 ...

  5. python 3 中的 os 以及 os.path 模块的使用详解!阿波的博客

    首先是os模块: 要先明确两个表示:'.'表示的是当前目录,'-'表示的是上一级目录(如果现在有点乱的话,下面会有具体的使用,请往下看..) getcwd():返回当前的工作目录: import os ...

  6. python描述回文素数_回文素数-随心随性无为而为-51CTO博客

    问题描述: 所谓回文素数是指,对一个整数n从左向右和从右向左读结果值相同且是素数,即称为回文素数. 求不超过1000的回文素数. 我的代码:import math def prime(m): coun ...

  7. python 匹配字符串map lambda函数_Python map amp; reduce 以及lambda匿名函数 - jvisualvm - ITeye博客...

    map() map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. 使用map实现一个f(x) = x * ...

  8. python mssql session_python的web框架webpy【session amp; cookie】五 - 莫激动 - ITeye博客

    webpty中使用session非常简单 import web web.config.debug = False urls = ( "/count", "count&qu ...

  9. python计算年龄的方法_巧算年龄-随心随性无为而为-51CTO博客

    问题描述: 有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁.问第4个人岁数,他说比第3个人大2岁.问第3个人,又说比第2个人大2岁.问第2个人,说比第1个人大2岁.问最后1个人,他说是10岁 ...

最新文章

  1. java 根据详细地址提取小区_Java分析/测试工具EJ Technologies JProfiler介绍及安装教程...
  2. 小程序离成功还差一个版本
  3. CF891C-Envy【可撤销并查集】
  4. P2280 [HNOI2003]激光炸弹
  5. Nandflash 驱动深度分析(基于S3C2410)
  6. android 机顶盒 页面布局,Android机顶盒用户DIY手册.doc
  7. jsp版本的环境变量集合
  8. Django:数据进行md5加密
  9. Triangular Pastures
  10. c++程序设计语言第四版pdf_寒假攻略 | 开启C语言自学模式
  11. POJ 2391 Ombrophobic Bovines【二分+最大流】
  12. 新增Tao插件,Red Giant 经典特效插件 Trapcode Suite 13 for Win/Mac
  13. java修改yml文件
  14. 未来教育计算机二级学生文档,未来教育计算机二级MS-office题库(解题步骤)题库.docx...
  15. DNA 测序技术的发展:第三代测序法
  16. js删除数组,checkedBox选中状态,javascript数组删除重复项
  17. SQL like子查询
  18. 安卓高级面试知识整理
  19. OpenStack社区周报:Neutron网络之负载均衡,设计OpenStack云时需要避开的十个误区...
  20. 安兔兔电脑ssd测试软件,安兔兔SSD测试软件测评,威钰战国NVMe SSD

热门文章

  1. 2023,告别焦虑,做个成就感爆棚的程序员吧
  2. IPB072N15N3G-ASEMI代理英飞凌高压MOS管IPB072N15N3G
  3. 搜狗云输入法的安装和使用
  4. 区块链架构下,智慧城市加速发展
  5. Python免费教育工具 Online Python Tutor
  6. 华为5700交换机导出导入本地配置
  7. 3D电子围栏技术介绍
  8. 【金黑凤凰】Windows 10 2004 Pro for Workstations 19041.388[3264bit]双模版20200716
  9. 嵌入式学习(三)—调试工具J_Link介绍
  10. 安卓开发之SQLite数据库