Python编码规范

编码

无特殊要求,全用 utf-8
即,在python脚本的头部加上如下内容:

# -*-coding:utf-8-*-

代码格式

  1. 缩进:统一使用 4 个空格进行缩进
  2. 行宽:<=80个字符(特殊情况:最多120个字符)
               特殊情况:(1)长的导入模块语句;
                                  (2)注释里的URL;
               解决方案:太长的语句,可以借助小括号()或者反斜杠\隐式的连接起来
例如:
def long_function_name(
       var_one, var_two, var_three,
       var_four):

print 'Hello, '\
     '%s %s!' %\
     ('Harry', 'Potter')
  1. 引号:
    (1)自然语言 使用双引号 “…”
             例如:错误信息;很多情况还是 unicode,使用u"你好世界"
    (2)机器标识 使用单引号 ‘…’
             例如: dict 里的 key
    (3)正则表达式 使用原生的双引号 r"…"
    (4)文档字符串 (docstring) 使用三个双引号 “”"…"""
  2. 空行:
    (1)顶级定义之间空两行;(比如函数或者类定义之间.)
    (2)方法定义之间空一行;(类定义与第一个方法之间)
  3. 空格:
    (1)在二元运算符两边各空一格[=,-,+=,==,>,in,is not, and];
    (2)函数的参数列表之之间要有空格;
    (3)函数的参数列表中,默认值等号两边不要添加空格;

注释

1、块注释:“#”号后空一格,段落件用空行分开(同样需要“#”号)
2、行注释:至少使用两个空格和语句分开,注意不要使用无意义的注释
3、比较重要的注释段, 使用多个等号隔开, 可以更加醒目, 突出重要性,比如:

app = create_app(name, options)

# =====================================
# 请勿在此处添加 get post等app路由行为 !!!
# =====================================

if __name__ == '__main__':
   app.run()

4、文档注释:
        一般出现在模块头部、函数和类的头部。
        在python中可以通过对象的__doc__对象获取文档.
(1)文档注释以 “”" 开头和结尾, 首行不换行, 如有多行, 末行必需换行, 以下是Google的docstring风格示例

# -*- coding: utf-8 -*-
"""Example docstrings.
This module demonstrates documentation as specified by the `Google Python
Style Guide`_. Docstrings may extend over multiple lines. Sections are created
with a section header and a colon followed by a block of indented text.
Example:
    Examples can be given using either the ``Example`` or ``Examples``
    sections. Sections support any reStructuredText formatting, including
    literal blocks::
        $ python example_google.py
Section breaks are created by resuming unindented text. Section breaks
are also implicitly created anytime a new section starts.
"""

(2)函数,描述其具体内容, 解释具体参数和返回值等

def function(a, b):
    """计算并返回a到b范围内数据的平均值"""
    ... ...

(3)对函数参数、返回值等的说明采用numpy标准, 如下所示

def func(arg1, arg2):
    """在这里写函数的一句话总结(如: 计算平均值).
    这里是具体描述.
    参数
    ----------
    arg1 : int
        arg1的具体描述
    arg2 : int
        arg2的具体描述
    返回值
    -------
    int
        返回值的具体描述
    参看
    --------
    otherfunc : 其它关联函数等...
    示例
    --------
    示例使用doctest格式, 在`>>>`后的代码可以被文档测试工具作为测试用例自动运行
    >>> a=[1,2,3]
    >>> print [x + 3 for x in a]
    [4, 5, 6]
    """

(4)创建Python文件模板:

#!/usr/bin/env python
# -*-coding:utf-8-*-

#set( $SITE = "https://github.com/Kyod/python_foundation" )
#set( $USER = "Kyod" )
"""
@project: python_foundation
@version: 1.0
@site: ${SITE}
@software: ${PRODUCT_NAME}
@file: ${NAME}.py
@time: ${DATE} ${TIME}
@author: ${USER}
@description: 本文件用于。。。
"""
 
def func():
    pass
 
class Main():
    def __init__(self):
        pass
 
if __name__ == '__main__':
    pass

命名规范

1、模块:尽量全小写(单词之间用下划线 _ 连接,但不要用太多单词)
2、类名:驼峰命名!(首字母大写,私有类可以用一个下划线 _ 开头)
3、函数:一律小写,多个单词之间用下划线 _ 连接,私有函数前加一个下划线 _
4、变量名:尽量小写,多个单词之间用下划线 _ 连接
5、常量名:全大写,多个单词之间用下划线 _ 连接
用单下划线(_)开头,表示模块变量或函数是protected的(使用import * from时不会包含).

其他

1、类

如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.

2、字符串

避免在循环中用+和+=操作符来累加字符串.
由于字符串是不可变的, 这样做会创建不必要的临时对象, 并且导致二次方而不是线性的运行时间.
作为替代方案, 你可以将每个子串加入列表, 然后在循环结束后用 .join 连接列表.

    items = ['<table>']
    for last_name, first_name in employee_list:
        items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
    items.append('</table>')
    employee_table = ''.join(items)
3、文件和sockets

在文件和sockets结束时, 显式的关闭它
推荐使用 "with"语句 以管理文件:

with open("hello.txt") as hello_file:
    for line in hello_file:
        print line

对于不支持使用"with"语句的类似文件的对象,使用 contextlib.closing():

import contextlib

with contextlib.closing(urllib.urlopen("http://www.python.org/")) as front_page:
    for line in front_page:
        print line
4、TODO注释
# TODO(kl@gmail.com): Use a "*" here for string repetition.
# TODO(Zeke) Change this to use relations.

参考文档:
Python代码规范和命名规范
Python编码规范

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值