有好几份,找一份适合你自己的……
啄木鸟社区的 (此页面还包含几个其它风格的链接,google style, google summer of code style。。。)
http://wiki.woodpecker.org.cn/moin/PythonCodingRule
赖勇浩赖总的
http://blog.csdn.net/lanphaday/article/details/2834883
下面抄一下啄木鸟的(公司里面看不到) 也不知道到了公司会不会乱掉……
---------------------------------------------------------------------------------------------
--- hoxide 初译 dreamingk 校对发布 040724 --- xyb 重新排版 040915 --- ZoomQuiet MoinMoin 美化 050610
用Python进行开发时的编码风格约定 |
下载(中文pdf): PythonCodingRule.pdf |
愚蠢得使用一致性是无知的妖怪(A Foolish Consistency is the Hobgoblin of Little Minds)
呆板的坚持一致性是傻的没边了! -- Zoomq
(Code lay-out)
(Indentation)
(Tabs or Spaces)
(Maximum Line Length)
1 class Rectangle(Blob): 2 def __init__(self, width, height, 3 color='black', emphasis=None, highlight=0): 4 if width == 0 and height == 0 and \ 5 color == 'red' and emphasis == 'strong' or \ 6 highlight > 100: 7 raise ValueError, "sorry, you lose" 8 if width == 0 and height == 0 and (color == 'red' or 9 emphasis is None): 10 raise ValueError, "I don't think so" 11 Blob.__init__(self, width, height, 12 color, emphasis, highlight)
(Blank Lines)
(Encodings)(PEP 263)
Python 2.4 以后内核支持 Unicode 了! 不论什么情况使用 UTF-8 吧!这是王道!
(Imports)
No: import sys, os Yes: import sys import os
from types import StringType, ListType
from MyClass import MyClass from foo.bar.YourClass import YourClass
import MyClass import foo.bar.YourClass
即使用"MyClass.MyClass"和"foo.bar.YourClass.YourClass"
(Whitespace in Expressions and Statements)
"spam( ham[ 1 ], { eggs: 2 } )". Always write this as "spam(ham[1], {eggs: 2})".
紧挨着圆括号,方括号和花括号的,如:"spam( ham[ 1 ], { eggs: 2 } )". 要始终将它写成"spam(ham[1], {eggs: 2})".
"if x == 4 : print x , y ; x , y = y , x". Always write this as "if x == 4: print x, y; x, y = y, x".
"if x == 4 : print x , y ; x , y = y , x". 要始终将它写成 "if x == 4: print x, y; x, y = y, x".
紧贴着函数调用的参数列表前开式括号(open parenthesis )的,如"spam (1)".要始终将它写成"spam(1)".
slicing, as in: "dict ['key'] = list [index]". Always write this as "dict['key'] = list[index]".
"dict ['key'] = list [index]".要始终将它写成"dict['key'] = list[index]".
(Other Recommendations)
始终在这些二元运算符两边放置一个空格:赋值(=), 比较(==, <, >, !=, <>, <=,>=, in, not in, is, is not), 布尔运算 (and, or, not).
* 按你的看法在算术运算符周围插入空格. 始终保持二元运算符两边空格的一致.
No: if foo == 'blah': do_blah_thing() Yes: if foo == 'blah': do_blah_thing() No: do_one(); do_two(); do_three() Yes: do_one() do_two() do_three()
(Comments)
我就是坚持全部使用中文来注释,真正要发布脚本工具时,再想E文的; 开发时每一瞬间都要用在思量中,坚决不用在E文语法,单词的回忆中!
-- ZoomQUiet
约定使用统一的文档化注释格式有利于良好习惯和团队建议!-- CodeCommentingRule
(Block Comments)
(Inline Comments)
x = x+1 # Increment x
x = x+1 # Increment x
x = x+1 # Compensate for border
x = x+1 # Compensate for border
(Documentation Strings)
PEP 257. 应该一直遵守编写好的文档字符串(又名"docstrings")的约定(?实在不知道怎么译)
Documentation Strings-- 文档化字符 ; 为配合 pydoc;epydoc,Doxygen等等文档化工具的使用,类似于MoinMoin 语法,约定一些字符, 以便自动提取转化为有意义的文档章节等等文章元素! -- Zoomq
PEP 257 描述了好的文档字符串的约定.一定注意,多行文档字符串结尾的""" 应该单独成行,例如:
"""Return a foobang Optional plotz says to frobnicate the bizbaz first. """
实际上Python 自个儿就使用文档化编码维护着所有内置对象的使用说明\ 不信的话常试: #python >>> import time >>> dir(time) ['__doc__', '__file__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset'] >>> help(time.time) Help on built-in function time in module time: time(...) time() -> floating point number Return the current time in seconds since the Epoch. Fractions of a second may be present if the system clock provides them.
(Version Bookkeeping) (我觉得叫"注记"更好)
对于CVS的服务器工作标记更应该在代码段中明确出它的使用 如:在文档的最开始的版权声明后应加入如下版本标记: # 文件:$id$ # 版本: $Revision$ 这样的标记在提交给配置管理服务器后,会自动适配成为相应的字符串,如: # 文件:$Id: ussp.py,v 1.22 2004/07/21 04:47:41 hd Exp $ # 版本: $Revision: 1.4 $ ----HD
(Naming Conventions)
(Descriptive: Naming Styles)
CapitalizedWords(首字母大写单词串) (或 CapWords, CamelCase -- 这样命名是由于它的字母错落有致的样子而来的.
这有时也被当作StudlyCaps. 如:GetName
mixedCase (混合大小写串)(与首字母大写串不同之处在于第一个字符是小写如:getName)
Capitalized_Words_With_Underscores(带下划线的首字母大写串) (丑陋!)
os.stat()函数返回一个tuple, 他的元素传统上有象st_mode, st_size, st_mtime等等这样的名字. X11库的所有公开函数以X开头.
(在Python中,这个风格通常认为是不必要的, 因为属性和方法名以对象作前缀,而函数名以模块名作前缀.)
"Tkinter.Toplevel(master, class_='ClassName')".
__double_leading_underscore(双下划线): 从Python 1.4起为类私有名.
__double_leading_and_trailing_underscore__: 特殊的(magic) 对象或属性,存在于用户控制的(user-controlled)名字空间, 例如:__init__, __import__ 或 __file__. 有时它们被用户定义, 用于触发某个特殊行为(magic behavior)(例如:运算符重载); 有时被构造器(infrastructure)插入,以便自己使用或为了调试. 因此,在未来的版本中,构造器(松散得定义为Python解释器和标准库) 可能打算建立自己的魔法属性列表,用户代码通常应该限制将这种约定作为己用. 欲成为构造器的一部分的用户代码可以在下滑线中结合使用短前缀,例如. __bobo_magic_attr__.
(Prescriptive: Naming Conventions)
(Names to Avoid)
O'(大写字母oh),或I'(大写字母eye)作为单字符的变量名. 在某些字体中,这些字符不能与数字1和0分开.当想要使用'l'时,用'L'代替它.
(Module Names)
(Class Names)
几乎没有例外,类名总是使用首字母大写单词串(CapWords)的约定.
(Exception Names)
趋势似乎是倾向使用CapWords异常名.
(Global Variable Names)
(Function Names)
mixedCase仅被允许用于这种风格已经占优势的上下文(如: threading.py) 以便保持向后兼容.
(Method Names and Instance Variables)
如果类Foo有一个属性名为 __a, 它不能以Foo.__a访问. (执著的用户(An insistent user)还是可以通过Foo._Foo__a得到访问权.) 通常,双前导下划线应该只用来避免与类(为可以子类化所设计)中的属性发生名字冲突.
(Designing for inheritance)
(Programming Recommendations)
No: if foo[:3] == 'bar': Yes: if foo.startswith('bar'):
No: if type(obj) is type(1): Yes: if isinstance(obj, int):
在Python 2.2 类型模块为此定义了StringTypes类型, 例如:
No: if greeting == True: Yes: if greeting: No: if greeting == True: Yes: if greeting:
-- ZoomQuiet (2005-01-26)