PEP8 常用规范
完整的規范:
pep8規范?官方文檔:https://www.python.org/dev/peps/pep-0008/
PEP8中文翻譯:http://www.cnblogs.com/ajianbeyourself/p/4377933.html個人使用中常用的規范
一、代碼編排? ? ? ? ?
1 . 縮進。4個空格的縮進(編輯器都可以完成此功能)或者使用Tap,但是不能混合使用Tap和空格。2 . 每行最大長度79,換行可以使用反斜杠,最好使用圓括號。換行點要在操作符的后邊敲回車。
3 . 類和top-level函數定義之間空兩行;類中的方法定義之間空一行;函數內邏輯無關段落之間空一行;其他地方盡量不要再空行。
?
二、文檔編排? ? ?
1 . 模塊內容的順序:模塊說明和docstring—import—globals&constants—其他定義。其中import部分,又按標準、三方和自己編寫順序依次排放,之間空一行。 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Time : 2018/05/17 10:46 4 # @Author : MJay_Lee 5 # @File : tcp_server.py 6 # @Contact : limengjiejj@hotmail.com 7 8 import os #標準模塊--內置模塊 9 import sys 10 11 from tcp_server import online_user #第三方模塊 12 from threading import currentThread 13 from lib import common 14 15 from interface import common_interface, admin_interface, user_interface #自己寫的 16 17 conn_pool = ThreadPoolExecutor(10) 18 # 互斥鎖為了限制多個線程同時登錄一個ID時進行寫操作帶來的誤區 19 mutex = Lock() 20 # 之所以把mutex放在online_user.py文件中,是因為避免文件的交叉引用 21 online_user.mutex = mutex 22 23 def foo1 24 25 26 def foo2 2 . 不要在一句import中多個庫,比如import os, sys不推薦。 # 正確方式 import os import sys from subprocess import Popen, PIPE # 錯誤方式 import os,sys 3 . 如果采用from XX import XX引用庫,可以省略‘module.’,都是可能出現命名沖突,這時就要采用import XX。 from myclass import MyClass from foo.bar.yourclass import YourClass# 如果和本地名字有沖突: import myclass import foo.bar.yourclass?
三、空行的使用? ? ?
總體原則,避免不必要的空格。
1 . 各種右括號前不要加空格。2 . 逗號、冒號、分號前不要加空格。
3 . 函數的左括號前不要加空格。如Func(1)。
4 . 序列的左括號前不要加空格。如list[2]。
5 .?操作符左右各加一個空格,不要為了對齊增加空格。
6 .?函數默認參數使用的賦值符左右省略空格。
7 . 不要將多句語句寫在同一行,盡管使用‘;’允許。
8 . if/for/while語句中,即使執行語句只有一句,也必須另起一行。
四、注釋? ? ??
總體原則,英文,簡明。
- 與代碼自相矛盾的注釋比沒注釋更差。修改代碼時要優先更新注釋!
- 注釋是完整的句子。如果注釋是斷句,首字母應該大寫,除非它是小寫字母開頭的標識符(永遠不要修改標識符的大小寫)。
- 如果注釋很短,可以省略末尾的句號。注釋塊通常由一個或多個段落組成。段落由完整的句子構成且每個句子應該以點號(后面要有兩個空格)結束,并注意斷詞和空格。
- 非英語國家的程序員請用英語書寫你的注釋,除非你120%確信代碼永遠不會被不懂你的語言的人閱讀。
- 注釋塊通常應用在代碼前,并和這些代碼有同樣的縮進。每行以 '# '(除非它是注釋內的縮進文本,注意#后面有空格)。注釋塊內的段落用僅包含單個 '#' 的行分割。
- 慎用行內注釋(Inline Comments) 節儉使用行內注釋。 行內注釋是和語句在同一行,至少用兩個空格和語句分開。行內注釋不是必需的,重復羅嗦會使人分心。不要這樣做:
- # 正確寫法
x = x + 1 # Compensate for border
# 錯誤寫法
x = x + 1 # do nothing
?
五、命名? ? ? ?
總體原則,新編代碼必須按下面命名風格進行,現有庫的編碼盡量保持風格。
- b(單個小寫字母)
- B(單個大寫字母)
- lowercase(小寫串)
- lower_case_with_underscores(帶下劃線的小寫)
- UPPERCASE(大寫串)
- UPPER_CASE_WITH_UNDERSCORES(帶下劃線的大寫串)
- CapitalizedWords(首字母大寫的單詞串或駝峰縮寫)
- 類的方法第一個參數必須是self,而靜態方法第一個參數必須是cls。
- mixedCase(混合大小寫,第一個單詞是小寫)
- Capitalized_Words_With_Underscores(帶下劃線,首字母大寫,丑陋)
六 、編碼建議? ? ? ? ??
1 . 編碼中考慮到其他python實現的效率等問題,比如運算符‘+’在CPython(Python)中效率很高,都是Jython中卻非常低,所以應該采用.join()的方式。2 . 盡可能使用‘is’‘is not’取代‘==’,比如if x is not None 要優于 if x。
3 . 使用基于類的異常,每個模塊或包都有自己的異常類,此異常類繼承自Exception。
4 . 異常中不要使用裸露的except,except后跟具體的exceptions。
5 . 異常中try的代碼盡可能少。比如:
try:value = collection[key] except KeyError:return key_not_found(key) else:return handle_value(value) 要優于 try:return handle_value(collection[key]) except KeyError: # Will also catch KeyError raised by handle_value()return key_not_found(key) 6 . 使用startswith() and endswith()代替切片進行序列前綴或后綴的檢查。比如:
Yes: if foo.startswith('bar'):優于 No: if foo[:3] == 'bar': 7 . 使用isinstance()比較對象的類型。比如
Yes: if isinstance(obj, int): 優于 No: if type(obj) is type(1): 8 . 判斷序列空或不空,有如下規則
Yes: if not seq: if seq: 優于
No: if len(seq) if not len(seq) 9 . 字符串不要以空格收尾。
10 . 二進制數據判斷使用 if boolvalue的方式。 個人感言 :? 前幾天在看小說的時候,看到了這句話 : "代碼千萬條,整潔第一條,代碼不規范,親人兩行淚" . 感覺,哎呦,不錯呀.確實有些道理,就上網找了找編程規范,寫了這份博客,當做自己的博客開頭也挺好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 其實是被老大說批了............
?
轉載于:https://www.cnblogs.com/zmc940317/p/9374046.html
總結
- 上一篇: C#中File的使用
- 下一篇: TCP/IP协议模型详解