1. 程式人生 > 實用技巧 >python程式碼規範

python程式碼規範

python程式碼規範

1.縮排
4個空格,在linux系統下體現比較明顯,IDE會將Tab轉成4個空格,放心使用

2.行的最大長度
每行程式碼的最長字元數不超過80個,一屏可以看完,不需要左右移動

3.空行
本頁的一級類或者方法之間空2行,二級類和方法之間空1行

class A(object):
    # 空1行
    def __init__(self):
        a = 1
    # 空1行 
    class B(object):
        b = 1
    # 空1行   
    class C(object):
        c = 1
    # 空1行
    def aa(self):
        aa = self.B()
# 空1行
# 空1行
class B(object):
    # 空1行
    def __init__(self):
        a = 1
# 空1行
# 空1行
def a():
    return True
# 頁尾空1行

4.類命名
大駝峰命名:所有單詞的首字母都大寫,並且不使用特殊字元、下劃線和數字

# ✔️
class CodeStandard(object):

# ❌
class Code-Standard(object):
class Code_Standard(object):
class _CodeStandard(object):
class codeStandard(object):
class Codestandard(object):
class Codestandard2(object):

5.方法命名
全小寫字元或者下劃線,多單詞用下劃線連線,但下劃線不能做首字母

# ✔️
def code_standard():

# ❌
def Code_standard():
def _codestandard():  # 內建函式,受保護
def __codestandard():  # 內建函式,受保護
def code__standard():
def codestandard():

6.常量命名
以大寫字母開頭,全部大寫字母或下劃線或數字,多見於專案的settings檔案中

MAX_SIZE = 100

7.註釋
單行註釋:若註釋獨佔一行,#號頂頭,空1格後寫註釋;若是行尾註釋,空2格後#號再空1格寫註釋
多行註釋:三對雙引號(推薦使用)和三對單引號
複雜邏輯一定要寫註釋,除非這個專案就你一個人管一輩子

# 程式碼註釋
def code_standard():  # 程式碼註釋

"""
A...
B...
"""

'''
A...
B...
'''

8.匯入
每個檔案頭,都會有一些匯入,匯入順序為:先匯入python包,再匯入第三方包,最後匯入自定義的包。不使用的包不要匯入,不要兩個檔案迴圈匯入

import sys, os  # python包,可匯入多個
import pytz  # 第三方包
from datetime import datetime  # python包
from django.http import request, response  # 第三方包
from mysite.test import Test  # 自定義包
from mysite.test import *  # 不要讓我看到 import * 的這種程式碼,看到一次,我扣光你績效

9.空格
給變數賦值時,變數後空1個格,運算子或逗號後空1個格,作為引數時符號前後不空格

# ✔️
a = 1
a += 2
def b(num=0):

# ❌
a = 111  # 不要值都右對齊,整些沒有用的
b =   2
c =  23

10.try
程式碼中要儘量少的出現 異常捕獲 的程式碼,有些臨界值或極值你是可以預見的,如果沒有預見,那就讓程式碼報錯,重新修改程式碼,這是一個好的方式,加多了異常捕獲,反而會導致問題難以定位,勞心勞力,勞民傷財,編碼的好心情就沒了。異常也分好多種型別,可以根據不同的型別去做出相應的邏輯處理

# ❌
try:
    a += 2
except Exception, e:
    log.error(e)  # 最討厭這種,出錯無法定位,簡直就是披著羊皮的狼

11.全域性變數名
沒有特殊需求,不要使用全域性變數,有時候自己怎麼掉坑裡了都不知道

global aa

12.變數和傳參不要使用關鍵字

# ❌
len = 0
type = 'mysql'
id = 1
str = 'ffe'
def aa(type='mongo'):

13.方法的引數預設值中,不要有列表的預設值(引數傳的是指標)

# ❌
def a(a, b=[]):
    b.append(a)
    return b

>>> a(1, b=list('a'))
['a', 1]
>>> a(2, b=list('a'))
['a', 2]
>>> a('a')
['a']
>>> a('b')
['a', 'b']
>>> a('c')
['a', 'b', 'c']  # 這就是經常說,為啥我的結果有以前的重複的資料,解決:方法頭重新定義列表

14.方法的返回值
優先返回True或False,
其次是返回資料,但一定要保證返回的資料型別是一致的,別if裡返回的是True,else裡返回的是資料。很傷腦筋的。

django專案規範

.
├── README.md  # 專案說明
├── db.sqlite3  # sqlite檔案資料庫,一般採用關係型和非關係型資料庫(沒有此檔案)
├── draw  # 主專案目錄(裡面可建多app)
│   ├── __init__.py  # 匯入的根檔案
│   ├── admin.py  # 專案管理員配置看到的資訊
│   ├── migrations  # 資料庫遷移指令碼目錄
│   │   ├── 0001_initial.py  # 遷移指令碼
│   │   └── __init__.py
│   ├── models.py  # 資料建模,專案中最重要的東西
│   ├── settings.py  # 專案的環境變數
│   ├── urls.py  # 專案的路由,url的跳轉(不要使用反射,url規範如下)
│   ├── views.py  # 檢視層,邏輯處理
│   └── wsgi.py  # 專案服務的啟動入口
├── manage.py  # 專案命令的入口
├── media  # 上傳上來的媒體檔案的存放位置
│   └── avatar  # 分類目錄
│       └── mac_bsk3xvr.png  # 媒體檔案(頭像)
├── requirements.txt  # 專案使用的環境包和版本
├── static  # 專案使用的靜態檔案目錄
│   ├── css  # 樣式檔案目錄
│   │   └── application.css  # 樣式檔案
│   ├── img  # 圖片目錄
│   │   ├── header_bg.jpg  # 圖片檔案
│   │   ├── header_bg1.jpg
│   │   ├── header_bg_repeat.png
│   │   └── header_icons.png
│   └── js  # 指令碼目錄
│       ├── application.js  # 指令碼目錄
│       ├── jquery-1.8.0.min.js
│       └── rand.js
└── templates  # html模板目錄
    └── index.html  # html檔案

url規範
優秀的URL是可以表達這個介面所實現的功能的

api/zoos/   #所有動物園  
api/zoos/1/   #id為1的動物園  
api/zoos/1/animals/   #id為1的動物園中的所有動物