编码
无特殊要求,全用 utf-8
即,在python脚本的头部加上如下内容:
# -*-coding:utf-8-*-
代码格式
- 缩进:统一使用 4 个空格进行缩进
- 行宽:<=80个字符(特殊情况:最多120个字符)
特殊情况:(1)长的导入模块语句;
(2)注释里的URL;
解决方案:太长的语句,可以借助小括号()或者反斜杠\隐式的连接起来
例如:
def long_function_name(
var_one, var_two, var_three,
var_four):
print 'Hello, '\
'%s %s!' %\
('Harry', 'Potter')
- 引号:
(1)自然语言 使用双引号 “…”
例如:错误信息;很多情况还是 unicode,使用u"你好世界"
(2)机器标识 使用单引号 ‘…’
例如: dict 里的 key
(3)正则表达式 使用原生的双引号 r"…"
(4)文档字符串 (docstring) 使用三个双引号 “”"…""" - 空行:
(1)顶级定义之间空两行;(比如函数或者类定义之间.)
(2)方法定义之间空一行;(类定义与第一个方法之间) - 空格:
(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编码规范