最近组里都在整理代码,不管是实习生转正还是员工升级,都是要提交规范的代码送交代码规范委员会评定,并占有很重要的权重,由此想到总结一下python和C++常见的代码规划,义工学习。

python篇:

1.对于每级缩进,统一要求使用4个空格,而非tab键

2.续行,要求使用括号等定限界符,并且需要垂直对齐

正确的示范:

# 与定界(括号)符对齐
foo = long_function_name(var_one, var_two,
 var_three, var_four) #这个就是垂直对齐,第一行有参数
# 换行并增加4个额外的空格(一级缩进)
def long_function_name(
 var_one, var_two, var_three, #注意这里下面有一个print,所以这里要多增加四个空格区分,这个就是悬挂方式,注意增加四个空格
 var_four):
 print(var_one) 
# 悬挂需要增加一级缩进 
foo = long_function_name(
 var_one, var_two,
 var_three, var_four)

错误的示范:

# 当不使用垂直对齐时,第一行不允许加参数
foo = long_function_name(var_one, var_two,
 var_three, var_four) #不是垂直对齐也不是悬挂,错误
# 下面这种情况,需要增加额外的缩进,否则无法区分代码所在的缩进级别
def long_function_name(
 var_one, var_two, var_three,
 var_four):
 print(var_one)#由上可知对齐两种格式是可以的,即“垂直对齐”和“悬挂”。

3.如果包含定界符(括号,中括号,大括号)的表达式跨越多行,那么定界符的扩回符, 可以放置与最后一行的非空字符对齐或者与构造多行的开始第一个字符对齐

正确示范

# 与最后一行的非空字符对齐
my_list = [
 1, 2, 3,
 4, 5, 6,
 ]
result = some_function_that_takes_arguments(
 'a', 'b', 'c',
 'd', 'e', 'f',
 )
# 或者与开始构造多行的第一个字符对齐
my_list = [
 1, 2, 3,
 4, 5, 6,
]
result = some_function_that_takes_arguments(
 'a', 'b', 'c',
 'd', 'e', 'f',
)

4.对于会经常改动的函数参数、列表、字典定义,建议每行一个元素,并且每行增加一个逗号

yes = ('y', 'Y', 'yes', 'TRUE', 'True', 'true', 'On', 'on', '1') # 基本不再改变
kwlist = [
 'False',
 'None',
 'True',
 'and',
 'as',
 'assert',
 ...
 'yield', # 最后一个元素也增加一个逗号 ,方便以后diff不显示此行
]
person = {
 'name': 'bob',
 'age': 12, # 可能经常增加字段
}

错误示范

# 关键字会不断增加,每个元素都换行
kwlist = ['False', 'None', 'True', 'and', 'as',
 'assert', 'async', ...
]
person = {'name': 'bob', 'age': 12}

5.对于 if 判断,一般来说尽量不要放置过多的判断条件。换行时增加 4 个额外的空格

# 更推荐:在续行中,增加额外的缩进级别。允许 and 操作符在前
if (this_is_one_thing
 and that_is_another_thing):
 do_something()
# 更推荐:在续行中,增加额外的缩进级别
if (this_is_one_thing and
 that_is_another_thing):
 do_something()

6.每行的最大长度最多不超过120个字符。除了两种情况,一个是导入模块,一个是注释中包含url

x = ('This will build a very long long '
 'long long long long long long string') #可以用这种括号内的字符串隐形连接

7.在表达式的赋值符号、操作符左右至少有一个空格

x = y + 1
错误示范:
x=y+1
x = y+1

8.禁止行尾空白。为什么有这个要求呢,有的人觉得多打几个空格没什么,但其实在做code merge的时候我们diff文件,这个多余的空格会给开发人员带来困扰,所以不可以有

9.Python 没有三目操作符,对于二目操作符来说,操作符允许在换行符之后出现

# YES: 易于将运算符与操作数匹配,可读性高
income = (gross_wages
 + taxable_interest
 + (dividends - qualified_dividends)
 - ira_deduction
 - student_loan_interest)# No: 运算符的位置远离其操作数
income = (gross_wages +
 taxable_interest +
 (dividends - qualified_dividends) -
 ira_deduction -
 student_loan_interest)

10.tuple 元组不允许逗号结尾,显式增加括号规避。即使一个元素也加上括号。

正确:
trailingcomma = (['f'],)
return (1,)错误:
trailingcomma = ['f'], # tuple
return 1,

11.关于空行的一系列要求:

(1)模块中的一级函数和类定义之间,需要空两行

(2)类中函数定义之间,空一行

(3)源文件末尾有且仅有一行空行

(4)通常每个语句应该独占一行

正确的

if foo:
 bar(foo)
else:
 baz(foo)
try:
 bar(foo)
except ValueError:
 baz(foo)

错误的: 对于try ,except特别的不能把语句放在一行,这样有问题

if foo: bar(foo)
else: baz(foo)
try: bar(foo)
except ValueError: baz(foo)
try:
 bar(foo)
except ValueError: baz(foo)

(5)可以在代码段中的空一行来区分不同业务逻辑块。

12.源文件编码需统一使用UTF-8编码,以下内容需要增加到每一个python文件的头部。

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

13.避免不同操作系统对文件换行处理的方式不同,一律使用LF ,(LF:Linefeed,对应ASCII中转义字符n,表示换行)

14.关于shebang

程序的main文件应该以 #!/usr/bin/env python2 或者 #!/usr/bin/env python3 开始, 可以同时支持Python2、Python3的#!/usr/bin/env python

非程序入口的文件不应该出现 Shebang 。

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

15.关于模块引用:

每个导入应该独占一行,

import os
import sys

错误示范

import os, sys