python程式設計規範系列–建議01~07

天堂的鴿子發表於2019-01-18

  本系列來自《編寫高質量程式碼 改善python程式的91個建議》的讀書筆記整理。

本書主要內容

    1)容易被忽視的重要概念和常識,如程式碼的佈局和編寫函式的原則等;
    2)編寫python程式管用的方法,如利用assert語句去發現問題,使用enumerate()獲取序列迭代的索引和值等;
    3)語法中的關鍵條款,如有節制地使用from…import語句,異常處理的幾點基本原則等;
    4)常見庫的使用,如按需選擇sort()或者sorted(),使用Queue使多執行緒更安全等;
    5)python設計模式的使用,如用釋出訂閱模式實現鬆耦合,用狀態模式美化程式碼等;
    6)python內部機制,如名字查詢機制,描述符機制等;
    7)開發工具的使用,如pip等各種開發工具的使用,各種程式碼測試用具的使用等;
    8)python程式碼的效能分析,優化的原則,工具,技巧,以及常見效能問題的解決等。

本章主要內容

        建議1:理解pythonic概念
        建議2:編寫pythonic程式碼
        建議3:理解python與C語言的不同之處
        建議4:在程式碼中適當新增註釋
        建議5:通過適當新增空行使程式碼佈局更為優雅,合理
        建議6:編寫函式的4個原則
        建議7:將常量集中到一個檔案

建議1:理解pythonic概念

    1)pythonic:充分體現python自身特色的程式碼風格。
    2)舉例:
1 # 交換兩個變數的值,packaging/unpackaging機制
2 x = 2
3 y = 3
4 x, y = y, x
5 print x, y
1 # 字串格式化
2 print `Hello %(name)s!` % {`name`: `Tom`}
1 # 字串格式化
2 print `Hello {name}!`.format(name=`Tom`)
    3)python的包和模組結構: (1) 包和模組的命名採用小寫,單數形式且短小;(2)包通常作為名稱空間,如只包含空的__init__.py檔案。

建議2:編寫pythonic程式碼

    1)要避免劣化程式碼:(1)避免只用大小寫來區分不同的物件;(2)避免使用容易引起混淆的名稱;(3)不要害怕過長的變數名;
    2)pep8檢測工具:
1 C:>pip install -U pep8
2 
3 C:UsersAdministratorDesktopzxt>pep8 --first database.py
4 database.py:83:1: E302 expected 2 blank lines, found 1
5 
6 >pep8 --show-source --show-pep8 waijiao.py

建議3:理解python與C語言的不同之處

    1)縮排{}
    2)`
    3)三元操作符?:
    4)switch…case
1 n = raw_input("please input a number:")
2 if n == "0":
3 print "You typed zero."
4 elif n == "1":
5 print "You are in top."
6 elif n == "2":
7 print "N is an even number."
8 else:
9 print "Error!"
用跳轉可以實現:
1 def func():
2      return {
3          "0": "You typed zero.",
4          "1": "You are in top.",
5          "2": "N is an even number."
6      }.get(n, "Error!")

建議4:在程式碼中適當新增註釋

    1)使用塊或者行註釋的時候僅註釋複雜的操作,演算法,難以理解的技巧或者不夠一目瞭然的程式碼;
    2)註釋和程式碼隔開一定的距離;
    3)給外部可訪問的函式和方法新增文件註釋(ddocstring)(“”” “””);
    4)推薦檔案頭部包含copyright申明。模組描述等。
 1 """
 2 Requests HTTP library
 3 ~~~~~~~~~~~~~~~~~~~~~
 4 Requests is an HTTP library, written in Python, for human beings. Basic GET
 5 usage:
 6    >>> import requests
 7    >>> r = requests.get(`https://www.python.org`)
 8    >>> r.status_code
 9    200
10    >>> `Python is a programming language` in r.content
11    True
12 ... or POST:
13    >>> payload = dict(key1=`value1`, key2=`value2`)
14    >>> r = requests.post(`http://httpbin.org/post`, data=payload)
15    >>> print(r.text)
16    {
17      ...
18      "form": {
19        "key2": "value2",
20        "key1": "value1"
21      },
22      ...
23    }
24 The other HTTP methods are supported - see `requests.api`. Full documentation
25 is at <http://python-requests.org>.
26 :copyright: (c) 2015 by Kenneth Reitz.
27 :license: Apache 2.0, see LICENSE for more details.
28 """

建議5:通過適當新增空行使程式碼佈局更為優雅,合理

    1)在一組程式碼表達完一個完整的思路之後,應該用空白進行間隔;
    2)儘量保持上下文語義的易理解性(如呼叫函式寫在被呼叫函式之上);
    3)避免過長的程式碼行,每行最好不要超過80個字元;
    4)不要為了保持水平對齊而使用多餘的空格;
    5)空格是使用要能在需要強調的時候警示讀者:
        (1)二元運算子的左右兩邊應該有空格;
        (2)逗號和分號前不要使用空格;
        (3)函式名和左右括號之間,序列索引操作時序列名和[ ]之間不要空格,函式預設引數兩側不需要空格;
        (4)強調前面的操作符的時候使用空格。

建議6:編寫函式的4個原則

    1)函式設計儘量短小,巢狀層次不宜過深(最好控制在3層以內);
    2)函式宣告應該做到合理,簡單,易於使用;
    3)函式引數設計應該考慮向下相容;
    4)一個函式只做一件事,儘量保證函式語句粒度的一致性。

建議7:將常量集中到一個檔案

示例:const.py
 1 # -*-coding:UTF-8 -*-
 2 
 3 import sys
 4 
 5 
 6 class _const(object):
 7 
 8     class ConstError(TypeError):
 9         pass
10 
11     class ConstCaseError(ConstError):
12         pass
13 
14     def __setattr__(self, name, value):
15         if self.__dict__.has_key(name):
16             raise self.ConstError, "Can`t change const.{name}".format(name=name)
17         if not name.isupper():
18             raise self.ConstCaseError, `const name "{name}" is not all uppercase`.format(name=name)
19         self.__dict__[name] = value
20 
21 
22 sys.modules[__name__] = _const()

 

相關文章