1. 结合工程实践选题相关的一套源代码,根据其编程语言或项目特色,分析其在源代码目录结构、文件名/类名/函数名/变量名等命名、接口定义规范和单元测试组织形式等方面的作法和特色;mysql
工程实践为爬取用户评论在对这些数据进行分析,所以选取了一套爬取用户微博信息的代码进行分析,下图是该程序的结构:sql
search_spider - 根据关键字和时间进行爬取的模块 数据库
----hour_fenge.py 时间分隔函数:对要搜索的时间期限进行以每小时为单位的划分,返回包含全部时间单位的列表编程
----search_start.py 根据关键字和时间条件进行爬取的主要函数:其中包括爬取某页所有微博、微博全部页数的计算、保存数据库等功能cookie
tools - 工具模块 编程语言
----Config.cfg 数据库等配置文件ide
----Cookie_Process.py cookie处理函数:其中包括获取文件中存储的cookie、更新文件中存储的cookie等功能函数式编程
----Date_Process.py 时间处理函数:其中包括对爬取到微博的不一样时间格式进行统一函数
----Emoji_Process.py 表情处理函数:清除掉包含的utf8bm4编码格式的表情 ----Mysql_Process.py mysql数据库工具类:其中包括数据库链接、关闭、增删改查的操做等工具
----Number_Process.py 转发、评论数处理函数:对爬取到的微博的转发、评论数进行统一
user_spider - 爬取根据关键字搜索到的微博对应的微博用户的基本资料模块
----cookie.file 存储可用的cookie信息
----user_start.py 爬取用户资料的主要功能函数:包括获取所爬取微博的全部用户ID,并根据每一个ID爬取其基本信息
weibo_spider - 根据某个用户ID爬取其全部微博的模块
-----cookie.file 存储可用的cookie信息
-----weibo_start.py 爬取用户所有微博的主要功能函数:其中包括爬取某页所有微博、微博全部页数的计算、保存数据库等功能
comment_spider - 爬取根据关键字搜索到的微博对应的微博下的所有评论
----cookie.file 存储可用的cookie信息
----comment_start.py 爬取微博评论的主要功能函数:包括获取所爬取微博的全部微博ID,并根据每一个ID爬取其所有评论信息
从图中的代码结构,咱们能够发现:
2. 列举哪些作法符合代码规范和风格通常要求;
使用有意义的,英文单词或词组,不使用汉语拼音
package/module
名中不要出现 –
*在 list, dict, tuple, set, 参数列表的 , 后面加一个空格
* 在 dict 的 : 后面加一个空格
* 操做符两端加一个空格,如 +, -, *, /, |, &, =
* 接上一条,在参数列表里的 = 两端不须要空格
* 括号((), {}, [])内的两端不须要空格
* function 和 class 顶上两个空行
* class 的 method 之间一个空行
* 函数内逻辑无关的段落之间空一行,不要过分使用空行
* 不把多个语句写在一行
* if/for/while 语句中,即便执行语句只有一句,也要另起一行
3. 列举哪些作法有悖于“代码的简洁、清晰、无歧义”的基本原则,及如何进一步优化改进;
语句过长,没有使用换行,虽然是sql语句不是真正操做的代码,可是阅读起来也很不方便,可使用“\”控制换行。
注释过于简单,虽说明了每一个函数的功能,可是对于输入参数以及输出状况没有说明,对于多人协做开发可能会存在影响。
配置和代码放在一块儿,在这种比较小的项目中虽然不会形成什么影响。但对于模块较大以及配置较多的项目中,可能会形成混乱,能够将全部配置文件都存放在一个文件夹中。
4.总结同类编程语言或项目在代码规范和风格的通常要求。
函数、变量及属性都用小写单词拼写,只见用_链接,不遵循驼峰命名法
类与异常应该首字母大写,不要用_链接
变量要尽量有意义
和语法相关的每一层缩进都用4个空格表示,不能混用Tab和空格
若是一行的字符超过80个时,应进行换行。
赋值时等号两边都要有一个空格
在使用函数进行函数式编程时,函数之间要空两行
在类中的函数,函数之间应该空一行
函数与类是同一个级别,则他们之间应该空两行
判断变量是否为None、False或True时,要用is,例如,if a is None
import语句应放在句首,导入时最好指定具体功能。
检测容器不为空时,应使用if 容器名,例如,lists = [] if lists
Python中的注释分为单行注释,多行注释。
对某些重要的代码块的功能说明,应使用单行注释
对整个模块功能的说明应使用多行注释