python 的 styleguide

google 除了 C++ 以外别的语言都有 styleguide,比如 python

  • import 只 import package/module 不要 import 函数、类这些,可以使用 as
  • package name 尽量不要用相对的
  • 抛出异常是可以的,但是不要抛出非 Exception 的对象,语法应该使用 raise SomeException(msg) 这种形式
  • 避免全局变量,使用 module level 的变量,名字为 _UPPER_CASE
  • 嵌套的 class/def 可以使用,
  • list comprehension 用来替换 map/filter/lambda 的搭配,复杂的不建议使用
  • 使用标准容器的 iterator,使用 for some in container 的语法,尽量避免使用 dict.keys() 等
  • 可以使用 generator,即 yield 产生的那种
  • lambda 只能用 one-liner,并且能用 list comprehension 就不要用 lambda
  • conditional expression(python 版的 ?:)可以用 one liner
  • default parameter value:可以用 immutable value,但是不能用 mutable 的
  • 简单的 setter/getter 应该使用 @property 和 @prop.setter 标注的方法来实现
  • 使用 implicit 的 True/False 转换,这个对 string、list 等等都有(可以直接 if/if not),None test 用 is/is not
  • 避免下面一些用法,如 strings.splt、可以用 list comprehension 的 lambda,apply 等等
  • lexical scope 可以使用,但是不要用得太过火…
  • decorator/annotation 只在有明显优势的时候才使用,不能用 @staticmethod 实在是有点诡异
  • threading:不要依赖原生数据结构提供的 atomicity
  • 避免如下 power features:meta class(这个似乎非常强大的,居然禁掉了),access to byte code,on the fly compilation,dynamic inheritance,object reparenting,import hacks,reflection,modification of system internals,看起来是下一个学习 python 的起点呀

书写风格

  • 避免使用 ; 在同一行上写两行代码
  • 行宽 80
  • return 和 if 不需要 ()
  • 缩进 2 空格
  • top level 的定义(如类、def 等)间隔空两行
  • 空格:括号内侧不许用,标点前不应有,标点后应该有,运算符两侧应该有,默认值的=不需要,不要用空格做竖直方向对齐
  • shebang 需要省略掉(google 有自己的 runtime environment)
  • 类、函数都需要提供 doc string,除非非常简单的 oneliner,外部不可见,一般包括 Args、Returns 和 Raises 三个 section;注释用来解释一些不一目显然的用法
  • 父类如果没有一定要写 object
  • 避免使用 str 的 + 而使用 format/%
  • 对资源的使用应该用 with 语法
  • TODO 类似 C++
  • import 一样写一个,不要一次 import 几个,基本顺序为系统,第三方以及应用自己的
  • if 只在没有 else 的 one liner 可以写一行
  • 命名遵循 module/package_name,ClassName,MethodName/method_name,FunctionName/function_name,GLOBAL_CONSTANT、global/local_variable,避免单字母变量(除非为循环变量),package/module 不要用 -,不要用 __ 开头的变量名,私有的可以用 _ 开头。
  • 函数长度没有限制,但是小巧的比较容易管理

——————
And Hamor and Shechem his son came unto the gate of their city, and communed with the men of their city, saying

Advertisements
python 的 styleguide

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s