Pocoo风格行为大赏

简介: Pocoo风格行为大赏

「无规矩不成方圆」Python 官方为所有开发人员制定了一套编码规范 - PEP 8。然而大部分研发团队并没有满足于此,就如同 Flask 框架的开发团队 Pocoo ,基于 PEP 8 进行调整扩充,形成了一套新的编码风格。如果你的项目正好使用了此框架,强烈建议仔细阅读。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

1.整体布局

1) 缩进采用4个空格,而非制表符( Tab 键)

2) 每行代码的长度不应该超过84个字符,最好保持在79个以内

可以通过 break 、 continue 和 return 等关键字避免层层嵌套,既保持代码的美观,又提升可读性(不必左右拉取进度条)。

3) 如果代码超过如何续行?可以尝试反斜杠 \ ,如下方的示例:

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

注意:为了保持美观,可以将链式调用中每个方法前的点 . 对齐;如果是括号内的换行,请将下一行与上一行的括号对齐,不需要使用续行符号;如果字典、列表、元祖内元素超级多,在起始括号后立即换行。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

4) 顶层函数和类由两个空行分隔,其它一个空行。不要使用过多空行来分隔代码逻辑段。例如:

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'

2.表达式与代码语句

2.1 常规空格规则

1) 不是关键词的一元运算符不使用空格(例如: -、 ~ 等等),对于圆括号也是这样。

2) 用空格包围二元运算符。

对:

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

2.2 禁止 Yoda 语句

永远不要用变量来比较常量,而是用常量来比较变量:

对:

if method == 'md5':
    pass

错:

if 'md5' == method:
    pass

2.3 比较

1) 针对任意类型使用 == 和 !=

2) 针对单一类型使用 is 和 is not(例如: foo is not None )

3) 永远不要与 True 或 False 作比较(例如永远不要写 foo == False ,而应当写 not foo )更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

2.4 排除检验

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

2.5 实例检验

使用 isinstance(a, C) 而不是 type(A) is C ,但是通常应当避免检验实例,而应当检验特性。

3.命名

1) 类名采用大驼峰: CamelCase ,缩写词大写( HTTPWriter 而不是 HttpWriter)

2) 变量名采用下划线连接: lowercase_with_underscores

3) 方法和函数名采用下划线连接: lowercase_with_underscores

4) 常量全部大写并采用下划线连接: UPPERCASE_WITH_UNDERSCORES

5) 预编译正则表达式: name_re

被保护的成员以单个下划线作为前缀,混合类则使用双下划线。

如果使用关键字作为类的名称,那么在名称末尾添加下划线。与内置构件冲突是允许的,请一定不要用 在变量名后添加下划线 的方式解决冲突。如果函数需要访问一个隐蔽的内置构件,请重新绑定内置构件到一个不同的名字。更多精彩文章请关注公众号『Pythonnote』或者『全栈技术精选』

3.1 函数和方法参数

1) 类方法: cls 作为第一个参数

2) 实例方法: self 作为第一个参数

3) 用于属性的 lambda 表达式应该把第一个参数替换为 x , 像下方代码一样:


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

4.文档字符串

4.1 文档字符串约定

所有的文档字符串为 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.
    """

4.2 模块首行

模块首行包含一个 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 扩展审核。

5.注释

注释的规则与文档字符串类似。两者都使用 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)

翻译自官方文档 https://flask.palletsprojects.com/en/1.0.x/styleguide/

相关文章
|
5月前
|
人工智能 前端开发 关系型数据库
AI 面试问答系统:一键生成专属面试题,智能评分助你拿 Offer
AI面试问答系统是一款开源智能面试备战工具:上传简历+岗位JD,AI自动生成四维面试题、追问及答案;支持背诵默写智能评分(0-100)、技能掌握度追踪(1-5星)与答案优化。兼容通义千问/GPT/DeepSeek等多模型,本地一键部署,免费开源!
|
10月前
|
人工智能 搜索推荐 机器人
2025年AI智能体来了,企业却还在试水池里扑腾!
88%企业都说用AI了,但大部分还在试点阶段扑腾?AI智能体听起来很酷,实际落地却像让ChatGPT去当总经理。揭秘为什么高效企业用AI搞创新,而不是只盯着省钱。从试点到规模化,这道坎比想象中难跨! #人工智能 #AI智能体 #企业数字化 #创新管理
434 3
|
缓存 安全 NoSQL
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
Spring Cloud实战 | 第六篇:Spring Cloud Gateway+ Spring Security OAuth2 + JWT实现微服务统一认证鉴权
|
NoSQL Linux Redis
Docker安装Redis并配置文件启动
之前已经写过Redis分别在Linux、Windows上安装部署,及其集群环境搭建。这次写一篇Docker容器部署Redis的教程,配置文件方式启动服务。
Docker安装Redis并配置文件启动
|
存储 SQL 监控
关系型数据库. 基本的DELETE语句
`SQL DELETE` 语句用于从表中删除记录,基本格式为 `DELETE FROM 表名 WHERE 条件`。`WHERE` 子句可选,指定删除特定记录。例如,`DELETE FROM students WHERE age > 20;` 将删除年龄大于 20 的学生。执行前注意备份,总是使用 `WHERE` 子句以避免误删,并考虑在事务中执行以保证数据安全。大量删除可能影响性能,需谨慎操作。还要留意可能存在的触发器影响。
1333 2
|
9月前
|
应用服务中间件 Shell nginx
我的docker学习笔记
本指南系统讲解Docker核心实践:涵盖安装配置、镜像获取与管理、容器生命周期操作(启停/日志/进入/导入导出)、数据卷与Bind Mount数据持久化、网络配置(Bridge/自定义网络/DNS)、Dockerfile定制镜像(COPY/ADD/CMD/ENTRYPOINT/ENV/ARG/VOLUME等指令详解)及Docker Compose编排应用。内容实用,步骤清晰,适合快速上手与深入实践。(239字)
620 6
|
机器学习/深度学习 算法 C语言
线性代数与编程语言结合 基础
线性代数与编程语言结合 基础
743 0
|
存储 程序员 编译器
什么是内存泄漏?C++中如何检测和解决?
大家好,我是V哥。内存泄露是编程中的常见问题,可能导致程序崩溃。特别是在金三银四跳槽季,面试官常问此问题。本文将探讨内存泄露的定义、危害、检测方法及解决策略,帮助你掌握这一关键知识点。通过学习如何正确管理内存、使用智能指针和RAII原则,避免内存泄露,提升代码健壮性。同时,了解常见的内存泄露场景,如忘记释放内存、异常处理不当等,确保在面试中不被秒杀。最后,预祝大家新的一年工作顺利,涨薪多多!关注威哥爱编程,一起成为更好的程序员。
879 0
|
人工智能 监控 安全
掌握Windows管理利器:WMI命令实战
本文介绍了Windows Management Instrumentation (WMI) 的基本概念和用途,通过多个实用的`wmic`命令示例,如获取CPU信息、查看操作系统详情、管理服务、检查磁盘空间等,展示了WMI在系统维护中的强大功能。适合IT专业人士学习和参考。
1877 4
|
canal 关系型数据库 MySQL
四种常用的 MySQL 数据同步 ES 的方法
【2月更文挑战第16天】
5019 2
四种常用的 MySQL 数据同步 ES 的方法