Pocoo 风格指引是所有 Pocoo 项目的风格指引,包括 Flask 。这份风格指引 在 Flask 补丁中是必须的,并且推荐在 Flask 扩展中使用。
一般而言, Pocoo 风格指引遵循 PEP 8 ,有一些小差异和扩充。
你可以使用反斜线来继续一个语句,在这种情况下,你应该对齐下一行到最后一个 点或等号或缩进四个空格:
this_is_a_very_long(function_call, 'with many parameters') \
.that_returns_an_object_with_an_attribute
MyModel.query.filter(MyModel.scalar > 120) \
.order_by(MyModel.name.desc()) \
.limit(10)
如果在一个带括号的语句中换行,对齐到括号:
this_is_a_very_long(function_call, 'with many parameters',
23, 42, 'and even more')
对于有许多元素的元组或列表,在起始括号后立即换行:
items = [
'this is the first', 'set of items', 'with more items',
'to come in this line', 'like this'
]
顶层函数和类由两个空行分隔,其它东西一行。不要使用太多的空行来分隔 代码中的逻辑段。示例:
def hello(name):
print 'Hello %s!' % name
def goodbye(name):
print 'See you %s.' % name
class MyClass(object):
"""This is a simple docstring"""
def __init__(self, name):
self.name = name
def get_annoying_name(self):
return self.name.upper() + '!!!!111'
Good
exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict['key']
Bad
exp = - 1.05
value = ( item_value / item_count ) * offset / exp
value = (item_value/item_count)*offset/exp
value=( item_value/item_count ) * offset/exp
value = my_list[ index ]
value = my_dict ['key']
永远不要用变量与常量做比较,而是把常量与变量做比较:
God
if method == 'md5':
pass
Bad
if 'md5' == method:
pass
被保护的成员以单个下划线作为前缀,双下划线为 mixin 类保留。
有关键字的类上,在末尾添加下划线。允许与内置组建冲突,并且 一定不要 在用在变量名后添加下划线的方式解决。如果函数需要访问一个隐蔽 的内置构件,重绑定内置构件到一个不同的名字作为替代。
所有的文档注释应为 Sphinx 可理解的 reStructuredText 格式,其格式根据注释行数而变化。 如果只有一行,闭合的三引号和开头的三引号在同一行, 否则开头的三引号与文本在同一行,而闭合的三引号另起一行:
def foo():
"""This is a simple docstring"""
def bar():
"""This is a longer docstring with so much information in there
that it spans three lines. In this case the closing triple quote
is on its own line.
"""
模块标头包含一个 utf-8 编码声明(即使没有使用非 ASCII 字符,也始终推荐这么做) 和一个标准的文档注释:
# -*- coding: utf-8 -*-
"""
package.module
~~~~~~~~~~~~~~
A brief description goes here.
:copyright: (c) YEAR by AUTHOR.
:license: LICENSE_NAME, see LICENSE_FILE for more details.
"""
请留意,合适的版权和许可证文件对于 Flask 扩展通过审核是必须的。
注释的规则和文档注释类似。两者都使用 reStructuredText 格式。如果一个 注释被用于一个属性的文档,在起始的井号( # )后加一个冒号:
class User(object):
#: the name of the user as unicode string
name = Column(String)
#: the sha1 hash of the password + inline salt
pw_hash = Column(String)