文档章节

Flask 开发团队内部 Python 编码风格指南

大数据之路
 大数据之路
发布于 2016/02/17 00:25
字数 1632
阅读 581
收藏 17

1、Pocoo Team简介

Pocoo团队的成员来自Python社区,统一以Pocoo的名义参与多个Python库和应用的开发工作。团队由Georg Brandl和Armin Ronacher领导。

团队项目

Pocoo团队开发了许多广受欢迎的项目,其中包括:

Pocoo团队编码风格指南适用于所有Pocoo团队的项目。总体来说,Pocoo团队编码风格指南严格遵循了PEP8的要求,但略有一些不同之处,并进行了一定的扩展延伸。

2、代码布局(General Layout)

  • 缩进(Indentation)

4个空格。不能使用Tab制表符,没有例外。

  • 每行最大长度

79个字符,如果必要可以接受最多84个字符。尽量避免代码嵌套层级过多,可以通过巧妙地使用breakcontinuereturn语句实现。

  • 长语句换行

编写长语句时,可以使用换行符(\)换行。在这种情况下,下一行应该与上一行的最后一个“.”句点或“=”对齐,或者是缩进4个空格符

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'

3、表达式和语句

一般空格规则

  • 单目运算符与运算对象之间不空格(例如,-,~等),即使单目运算符位于括号内部也一样。

  • 双目运算符与运算对象之间要空格。

好风格:

exp = -1.05
value = (item_value / item_count) * offset / exp
value = my_list[index]
value = my_dict['key']

坏风格:

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']

不能编写尤达语句

(Yoda Statements,指的是类似星战中尤达大师那样颠倒句子的正常顺序):

不要拿常量与变量进行对比,应该拿变量与常量进行对比。

好风格:

if method == 'md5':
    pass

坏风格:

if 'md5' == method:
    pass

比较:

  • 任意类型之间的比较,使用“==”和“!=”。

  • 与单例(singletons)进行比较时,使用isis not

  • 永远不要与TrueFalse进行比较(例如,不要这样写:foo == False,而应该这样写:not foo)。

否定成员关系检查:

使用foo not in bar,而不是not foo in bar

实例检查:

使用isinstance(a, C),而不是type(a) is C。但是一般要避免做实例检查。建议检查实例的特性。

4、命名规范

  • 类名称:采用骆驼拼写法(CamelCase),首字母缩略词保持大写不变(HTTPWriter,而不是HttpWriter)。

  • 变量名:小写_以及_下划线(lowercase_with_underscores)。

  • 方法与函数名:小写_以及_下划线(lowercase_with_underscores)。

  • 常量:大写_以及_下划线(UPPERCASE_WITH_UNDERSCORES)。

  • 预编译的正则表达式:name_re。

受保护的元素以一个下划线为前缀。双下划线前缀只有定义混入类(mixin classes)时才使用。

如果使用关键词(keywords)作为类名称,应在名称后添加后置下划线(trailing underscore)。允许与内建变量重名,不要在变量名后添加下划线进行区分。如果函数需要访问重名的内建变量,请将内建变量重新绑定为其他名称。

函数和方法的参数:

  • 类方法:cls为第一个参数。

  • 实例方法:self为第一个参数。

  • property函数中使用匿名函数(lambdas)时,匿名函数的第一个参数可以用x替代,例如:

    display_name = property(lambda x: x.real_name or x.username)

5、文档字符串

  • 文档字符串规范:

所有文档字符串均以reStructuredText格式编写,方便Sphinx处理。文档字符串的行数不同,布局也不一样。如果只有一行,代表字符串结束的三个引号与代表字符串开始的三个引号在同一行。如果为多行,文档字符串中的文本紧接着代表字符串开始的三个引号编写,代表字符串结束的三个引号则自己独立成一行。

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扩展(extension)通过官方团队审核,则必须提供相应的版权与协议文件。

6、注释

注释的规范与文档字符串编写规范类似。二者均以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)

Refer:

[1] The Pocoo Style Guide

http://www.pocoo.org/internal/styleguide/

本文转载自:http://codingpy.com/article/pocoo-internal-style-guide-cn/

共有 人打赏支持
大数据之路
粉丝 1520
博文 516
码字总数 342870
作品 0
武汉
架构师
python开发者的必备工具(一)

1.python开发工具 pip 可以快速安装第三方python包; virtualenv 可以创建一个与外界隔离的python运行环境,使项目更加可控; virtualenvwrapper 使用它可以更加方便的使用virtualenv提供的功...

柯南少少泡泡
2014/07/31
0
0
web开发快餐式入门指南 0. 写在前面

Web框架层出不穷,然而它们又大同小异。绝大多数框架都按照MVC架构风格所设计,所以他们提供的组件和功能都十分类似。很多教程在讲解如何使用某一框架开发Web应用时,专注于它在这个框架的实...

apachecn_飞龙
2016/02/23
0
0
时隔 8 年,Flask 1.0 终于发布,放弃支持 Py 2.6 和 3.3

(点击上方公众号,可快速关注) 【导读】:在浏览器拼版本号的时代,有些软件的更新,则显得龟速了。比如:2017 年,Python 科学计算库 SciPy 时隔 16 年后才升到 1.0 版。还有,今天本文的...

p5deyt322jacs
05/02
0
0
[雪峰磁针石博客]python代码风格指南(PEP8中文版)

本文给出主Python版本标准库的编码约定。CPython的C代码风格参见PEP7。 本文和PEP 257 文档字符串标准改编自Guido最初的《Python Style Guide》, 并增加了Barry的GNU Mailman Coding Style ...

磁针石
08/21
0
0
python-成长之路

一系列python方面有价值的参考/跟python有关的东西 http://www.path8.net/tn/archives/6017 Tools PyCharm – 来自JetBrains的强大的IDE Python Tools for Visual Studio Eclipse + pydev Ap......

_Mr_Computer_
2016/07/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

简单谈一谈压力测试

最近,在做API的压力测试,趟了不少坑,然后呢,简要记录一下。 压测前需要准备的一些事 拿到API文档不要立马上手,先基准测试,就是执行一次接口测试,至少要压这个接口,要先熟悉一下他的参...

浮躁的码农
48分钟前
0
0
PHP 错误调查

一.定义:PHP错误是由PHP无法读懂执行的代码引起的错误。 二:错误日志 error log 1.在php.ini 里设置 log_errors = on, log文件位置 error_log=/tmp/php_errors.log 2.代码里设置ini_set('...

忙碌的小蜜蜂
51分钟前
1
0
knn算法

import numpy as np def CreateDateSet(): group = np.array([[1.0, 2.0], [1.2, 0.1], [0.1, 1.4], [0.3, 3.5]]) labels = ['A','A','B','B'] return group,labels coding:utf-8 from numpy......

南桥北木
51分钟前
1
0
自己手写一个 SpringMVC 框架

前端框架很多,但没有一个框架称霸,后端框架现在Spring已经完成大一统.所以学习Spring是Java程序员的必修课. Spring 框架对于 Java 后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,...

别打我会飞
今天
2
0
01-《Apache Tomcat 9》之文件索引

《Apache Tomcat 9》是《看Apache官方文档学英语》的第一个专栏!让我们一起在看文档的过程中学英语,在学英语的过程中夯实技术! Documentation Index - 文件索引 Introduction - 介绍 This...

飞鱼说编程
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部