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中的註釋分爲單行註釋,多行註釋。
對某些重要的代碼塊的功能說明,應使用單行註釋
對整個模塊功能的說明應使用多行註釋