提高你的Python編碼效率的「武林秘籍」

2019-07-17   naiveai

我用 Python 編程有幾年了, 並且我仍然經常驚訝於 Python 代碼可以如何的簡潔,如何的 DRY 。 我學到了很多小貼士和技巧,大多數來自於閱讀開源項目的原始碼,像 Django, Flask, Requests 等。

這裡我挑出了幾個有時被大家忽略的幾條,但是它們在日常工作中會有很大幫助。

字典和集合推導式

大多數 Python 開發者知道使用列表推導式。你不熟悉這一點? 一個列表推導式是一個創造列表的簡短方式:

>>> some_list = [1, 2, 3, 4, 5]

從 Python 3.1 開始(也反向地移植到了 Python 2.7),我們可以用同樣的方式創建集合和字典:

>>> # Set Comprehensions

第一個例子中,我們用 some_list 建立了一個元素不重複的集合,但只有偶數。第二個字典的例子中展示了一個字典的創建,這個字典的鍵是1到10(包括10),值是布爾值,指明該鍵是不是一個偶數。

另一個值得注意的地方是集合的文法,我們可以這麼簡單的創建一個集合:

>>> my_set = {1, 2, 1, 2, 3, 4}

而沒有使用到內建的 set 方法

使用計數器對象計數

很明顯,但很容易遺忘。計數是一個尋常不過的編程任務,而且大多數情形下這不是個難事。不過計數可以更簡單。

Python 的 collections 庫包含一個 dict 的子類,專門解決計數任務:

>>> from collections import Counter

漂亮的列印 JSON

JSON 是一個很棒的序列格式,如今廣泛應用在 API 和 web 服務中,但是很難用裸眼來看大數據量的 JSON ,它們很長,還在一行里。

可以用參數 indent 來更好地列印 JSON 數據,這在跟 REPL 或是日誌打交道的時候很有用:

>>> import json

另外,去看看內建模塊 pprint , 它可以幫助你漂亮地輸出其它的東西。

快速建立一個 web 服務

有時我們需要一個建立 RPC 服務簡單而快速的方法。我們需要的只是讓程序B去調用程序A(可能在另一個機器上)的方法。

我們不用了解關於這個的任何技術,但是我們只是需要這麼個簡單的東西,我們可以使用一個叫做 XML-RPC 的協議(對應的 Python 庫實現 SimpleXMLRPCServer )來處理這種事。

這裡是一個簡單粗糙的文件閱讀伺服器:

from SimpleXMLRPCServer import SimpleXMLRPCServer

響應它的客戶端:

import xmlrpclib

現在我們就有了一個遠程的文件閱讀器,除了一點代碼,沒有外部依賴。(當然,不安全,所以只在」家」用這個吧)

Python 的開源社區

剛我一直在說 Python 的標準庫了,這些庫只要你安裝 Python 就會包含在你的 Python 中。對於大多數的其他任務,這裡有大量的社區維護的第三方庫來滿足我們的需求。

這是一個我挑選 Python 庫的辦法:

  • 包含一個明確的協議,以便我們使用
  • 積極活躍的開發和維護
  • 可以用 pip 來安裝,可以輕易地重複部署
  • 擁有一個合適覆蓋率的測試集

如果你發現了一個適合你需求的 Python 庫,不要害羞,大多數開源項目歡迎我們貢獻代碼和協助,即使你不是一個Python 老將。幫助之手隨時受歡迎!

追加的技巧

  • 快速在一個目錄建立 HTTP 伺服器
python -m SimpleHTTPServer 推薦:共享文件常用
  • 在 Python 3 中:
python -m http.server 推薦:共享文件常用
  • 命令行上漂亮地列印 JSON:
echo '{"json":"obj"}' | python -mjson.tool
  • 而且,如果你安裝了 Pygments 模塊,可以高亮地列印 JSON:
echo '{"json":"obj"}' | python -mjson.tool | pygmentize -l json
  • 注意 {} 是一個空的字典,而不是空的集合

小編也為大家準備了一份python資料,私信小編「012」即可獲取!希望各位同學學業順利