目录
一、Python代码规范及编码原则
1、缩进
2、最大行长度
3、空行
4、import相关
5、字符串引号
6、表达式和语句中的空格
7、注释
8、命名规范
9、命名约定
二、JavaScript代码规范及编码原则
1、命名规则
2、空格与运算符
3、代码缩进
4、语句规则
5、对象规则
6、最大行长度
三、团队项目主要功能流程描述
四、团队分工及贡献分
一、Python代码规范及编码原则
本项目后端开发语言为python,其代码规范及编码原则主要基于PythonPEP8编码规范(PythonPEP8官方文档链接:https://www.python.org/dev/peps/pep-0008/),下面介绍它的主要内容。
1、缩进
1) 每一级缩进使用4个空格。
2) 续行应该与其包裹元素对齐,要么使用圆括号、方括号和花括号内的隐式行连接来垂直对齐,要么使用挂行缩进对齐3。当使用挂行缩进时,应该考虑到第一行不应该有参数,以及使用缩进以区分自己是续行。
2、最大行长度
1) 所有行限制的最大字符数为79。
2) 没有结构化限制的大块文本(文档字符或者注释),每行的最大字符数限制在72。
3、空行
1) 顶层函数和类的定义,前后用两个空行隔开。
2) 类里的方法定义用一个空行隔开。
3) 相关的功能组可以用额外的空行(谨慎使用)隔开。一堆相关的单行代码之间的空白行可以省略(例如,一组虚拟实现dummyimplementations)。
4) 在函数中使用空行来区分逻辑段(谨慎使用)。
5) Python接受control-L(即^L)换页符作为空格;许多工具把这些字符当作页面分隔符,所以你可以在文件中使用它们来分隔相关段落。请注意,一些编辑器和基于Web的代码阅读器可能无法识别control-L为换页,将在其位置显示另一个字形。
4、import相关
1) 各个import独立成行。
2) import应该总是在文件的最上面,在模块注释和文档字符串之后,在模块变量和常量之前。
3) 注意import的顺序,各个import的组需要用空行隔开,顺序为:
-标准库import
-相关的第三方import
-本地应用和库的import
4) 推荐使用绝对路径导入,如果导入系统没有正确的配置(比如包里的一个目录在sys.path里的路径后),使用绝对路径会更加可读并且性能更好(至少能提供更好的错误信息)。
5) 在import一个class的时候,如果不会引起命名冲突,则可以使用from进行import,否则则直接import并且使用全名。
6) 应该避免使用利用通配符进行import,也就是避免使用fromxxximport*。
5、字符串引号
在Python中,单引号和双引号字符串是相同的。PEP不会为这个给出建议。选择一条规则并坚持使用下去。当一个字符串中包含单引号或者双引号字符的时候,使用和最外层不同的符号来避免使用反斜杠,从而提高可读性。
对于三引号字符串,总是使用双引号字符来与PEP257中的文档字符串约定保持一致。
6、表达式和语句中的空格
1) 以下几种情况不要额外加空格:
- 在各种括号之中,比如spam(ham[1],{eegs:2})而不是spam(ham[1],{eggs:2})
- 在逗号分号和冒号之前。
- 但是如果冒号作为分隔符,则前后都加空格。
- 后面立即跟了一个括号,比如函数调用的函数和括号之间不应该加空格。
- 后面跟的是索引或者切片的中括号,比如a[1]而不是a[1]
- 对于赋值或者其他操作符,不要为了多个语句对齐而加很多空格,前后一个即可。
2) 其他的建议
- 一行的尾部不要有空格。
- 二元运算符前后始终都最好有一个空格。
- 在一个表达式中有不同优先级的运算符,可以添加空格以区别优先级。
- 在调用函数时作为参数的那个等号则前后不要有空格(虽然看起来像个二元运算符),比如func(a=3,b=4)而不是func(a=3,b=4)
- 带箭头的函数,箭头两端也应该和二元运算符一样,前后有空格deffunc()->AnyStr:...
- 函数声明的默认参数,只有在有notation的时候前后有等号,否则前后没有等号。
- 多条语句最好不要在一行,if之后如果只有一条语句也最好不要在一行,如果有多条,则绝对不要在一行。
7、注释
与代码相矛盾的注释比没有注释还糟,当代码更改时,优先更新对应的注释。
注释应该是完整的句子。如果一个注释是一个短语或句子,它的第一个单词应该大写,除非它是以小写字母开头的标识符(永远不要改变标识符的大小写!)。
如果注释很短,结尾的句号可以省略。块注释一般由完整句子的一个或多个段落组成,并且每句话结束有个句号。
在句尾结束的时候应该使用两个空格。
1) 块注释
块注释通常适用于跟随它们的某些(或全部)代码,并缩进到与代码相同的级别。块注释的每一行开头使用一个#和一个空格(除非块注释内部缩进文本)。块注释内部的段落通过只有一个#的空行分隔。
2) 行内注释
有节制地使用行内注释。行内注释是与代码语句同行的注释。行内注释和代码至少要有两个空格分隔。注释由#和一个空格开始。事实上,如果状态明显的话,行内注释是不必要的,反而会分散注意力。
8、命名规范
Python库的命名规范很乱,从来没能做到完全一致。但是目前有一些推荐的命名标准。新的模块和包(包括第三方框架)应该用这套标准,但当一个已有库采用了不同的风格,推荐保持内部一致性。
以下是常见的命名方式:
- b(单个小写字母)
- B(单个大写字母)
- lowercase小写字母
- lower_case_with_underscores使用下划线分隔的小写字母
- UPPERCASE大写字母
- UPPER_CASE_WITH_UNDERSCORES使用下划线分隔的大写字母
- CapitalizedWords(或者叫CapWords,或者叫CamelCase驼峰命名法——这么命名是因为字母看上去有起伏的外观,有时候也被称为StudlyCaps。
- 注意:当在首字母大写的风格中用到缩写时,所有缩写的字母用大写,因此,HTTPServerError比HttpServerError好。
- mixedCase(不同于首字母大写,第一个单词的首字母小写)
9、命名约定
1) 应避免的名字
永远不要使用字母‘l’(小写的L),‘O’(大写的O),或者‘I’(大写的I)作为单字符变量名。
在有些字体里,这些字符无法和数字0和1区分,如果想用‘l’,用‘L’代替。
2) 包名和模块名
模块应该用简短全小写的名字,如果为了提升可读性,下划线也是可以用的。Python包名也应该使用简短全小写的名字,但不建议用下划线。
当使用C或者C++编写了一个依赖于提供高级(更面向对象)接口的Python模块的扩展模块,这个C/C++模块需要一个下划线前缀(例如:_socket)
3) 类名
类名一般使用首字母大写的约定。
在接口被文档化并且主要被用于调用的情况下,可以使用函数的命名风格代替。
注意,对于内置的变量命名有一个单独的约定:大部分内置变量是单个单词(或者两个单词连接在一起),首字母大写的命名法只用于异常名或者内部的常量。
4) 异常名
因为异常一般都是类,所有类的命名方法在这里也适用。然而,你需要在异常名后面加上“Error”后缀(如果异常确实是一个错误)。
5) 全局变量名
约定和函数命名规则一样。
通过fromMimport*导入的模块应该使用all机制去防止内部的接口对外暴露,或者使用在全局变量前加下划线的方式(表明这些全局变量是模块内非公有)。
6) 函数名
函数名应该小写,如果想提高可读性可以用下划线分隔。
大小写混合仅在为了兼容原来主要以大小写混合风格的情况下使用(比如threading.py),保持向后兼容性。
7) Functionandmethodarguments函数和方法参数
始终要将self作为实例方法的的第一个参数。
始终要将cls作为类静态方法的第一个参数。
如果函数的参数名和已有的关键词冲突,在最后加单一下划线比缩写或随意拼写更好。因此class_比clss更好。(也许最好用同义词来避免这种冲突)
8) 方法名和实例变量
遵循这样的函数命名规则:使用下划线分隔小写单词以提高可读性。
在非共有方法和实例变量前使用单下划线。
通过双下划线前缀触发Python的命名转换规则来避免和子类的命名冲突。
Python通过类名对这些命名进行转换:如果类Foo有一个叫__a的成员变量,它无法通过Foo.__a访问。(执着的用户可以通过Foo._Foo__a访问。)一般来说,前缀双下划线用来避免类中的属性命名与子类冲突的情况。
注意:关于__names的用法存在争论(见下文)。
9) Constants常量
常量通常定义在模块级,通过下划线分隔的全大写字母命名。例如:MAX_OVERFLOW和TOTAL。
二、JavaScript代码规范及编码原则
1、命名规则
JavaScript中通常推荐使用驼峰法,jQuery及其他JavaScript库都使用驼峰法。
1) 变量和函数为小驼峰法标识,即除第一个单词之外,其他单词首字母大写(lowerCamelCase)
2) 全局变量为大写(UPPERCASE)
3) 常量(如PI)为大写(UPPERCASE)
4) -通常在JavaScript中被认为是减法,所以不允许使用。
5) 变量名不要以$作为开始标记,会与很多JavaScript库冲突。
6) HTML与JavaScript尽量使用相同的命名规则。
7) 建议使用小写文件名。
2、空格与运算符
通常运算符(=+-*/)前后需要添加空格。
3、代码缩进
通常使用4个空格符号来缩进代码块。
4、语句规则
1) 简单语句的通用规则:
- 一条语句通常以分号作为结束符。
2) 复杂语句的通用规则:
- 将左花括号放在第一行的结尾。
- 左花括号前添加一空格。
- 将右花括号独立放在一行。
- 不要以分号结束一个复杂的声明。
5、对象规则
1) 对象定义的规则:
- 将左花括号与类名放在同一行。
- 冒号与属性值间有个空格。
- 字符串使用双引号,数字不需要。
- 最后一个属性-值对后面不要添加逗号。
- 将右花括号独立放在一行,并以分号作为结束符号。
6、最大行长度
为了便于阅读每行字符建议每行代码字符小于80个。如果一个JavaScript语句超过了80个字符,建议在运算符或者逗号后换行。
三、团队项目主要功能流程描述
本项目是一个简单的问答搜索程序,搜索页面比较简洁,只有一个简单的搜索框,输入你想要搜索的问题内容,点击搜索后程序会从各大网站搜索相关内容,返回相关回答的摘要,点击摘要后会跳转到相应的答案链接。
程序搜索的答案来自于国内三大权威问答网站:百度知道、搜搜问问和知乎,原则上可以拓展到更多的网站,搜索的内容相对的丰富全面,十分的方便快捷。
四、团队分工及贡献分
姓名 |
任务 |
分工比例 |
贡献分 |
杨圣豪 |
后端python代码规范及编码原则 |
25% |
10分 |
覃朗 |
后端python代码规范及编码原则 |
25% |
10分 |
邢路 |
前端JavaScript代码规范及编码原则 |
25% |
10分 |
尹康杰 |
团队项目主要功能流程描述及所有内容的整合 |
25% |
10分 |