導讀:Python是目前世界上最流行的程式語言之一。因為:
1.它容易學習
2.它用途超廣
3.它有非常多的開源支援(大量的模組和庫)
本文作者 Peter Gleeson 是一名資料科學家,日常工作幾乎離不開python。一路走來,他積累了不少有用的技巧和tips,現在分享給大家。這些技巧將根據其首字母按A-Z的順序進行展示。
作者:Peter Gleeson
譯者:Allen
來源:優達學城Udacity(ID:youdaxue)
01 all or any
Python之所以成為這麼一門受歡迎的語言一個原因是它的可讀性和表達能力非常強。Python也因此經常被調侃為“可執行的偽程式碼”。不信你看:
02 bashplotlib
你想要在控制檯繪圖嘛?
現在,你的控制臺中就可以有圖了
03 collections
Python有一些很棒的預設資料型別,但是有時候他們並不會像你所希望的那樣發揮作用。
幸運的是,Python 標準庫提供了collection模組。它讓你可以使用更為多樣資料型別。
04 dir
面對一個Python物件,你是否曾想過可以直接看到其屬性?你也許可以試試以下的程式碼:
這是執行Python的時候一個非常有用的功能,用於動態探索你所使用的物件和模組。更多詳情,可以檢視這裡:
https://docs.python.org/3/library/functions.html#dir
05 emoji
對的,你沒看錯!
用python來建立表情包,你也可以。
06 from __future__ import
Python非常受歡迎,這也就導致了它的版本更新非常快,新的版本往往會有很多新特性。你不更新,就無法使用。
然而,不要害怕。__future__ 模組可以讓你匯入未來版本的功能。有點像時空穿梭有木有!
07 geopy
對於程式猿來說地理可能是一個非常有挑戰性的領域。但是,geopy模組則讓它變得非常簡單。
它透過提取一系列不同地理編碼服務的api來工作,讓你能夠獲得一個地方的完整街道地址、緯度、經度,甚至海拔。
這裡面同時還包含一個有用的“距離”類別。它能使用你選定的度量去計算了兩個地點之間的距離。
08 howdoi
有時候你碰到了一個程式設計問題,覺得自己之前明明見過它的解決方法,但是卻記不起來具體是怎麼樣的了。於是你想要去StackOverflow上找,但又不想離開這個終端。這個時候,你需要下麵這個工具——howdoi
你所遇到的任何問題都可以問它,它會盡他所能給你傳回一個答案。
需要註意的是——它只從StackOverflow最頂端的答案中抓取程式碼。所以它給你傳回的不總是最有用的資訊…
09 inspect
Python的inspect模組用於收集Python物件的資訊,可以獲取類或函式的引數的資訊,原始碼,解析堆疊等等。
下方的程式碼樣例使用了 inspect.getsource() 來列印它自身的原始碼。同樣還使用了 inspect.getmodule()來列印定義了inspect.getmodule()的模組。最後一行程式碼則是列印了本行程式碼所在的行號。在本例中,就是 4 。
inspect模組可以有效地讓你知道你的程式碼是如何工作的,你也可以利用它來完成一些個人的原始碼。
10 Jedi
Jedi庫是一個程式碼自動補齊和靜態分析的庫。它可以使你更快更高效地書寫程式碼。
除非你在開發自己的編輯器,否則你可能會非常喜歡將Jedi作為自己的編輯外掛。
你可能已經正在使用Jedi而只是沒發現。IPython專案就是利用Jedi來實現其自動補全功能。
11 **kwargs
無論你學習那種語言,在這條學習之路上總有那麼一些里程碑。在Python的程式設計學習中,理解神秘的**kwargs語法應該算是一個重要的里程碑。
雙星“**”放在字典的前面可以讓你將字典的內容作為命名引數傳遞給函式。字典的鍵是引數的名字,鍵的值作為引數的值傳遞給函式。如下所示:
當你想要建立一個函式,它需要能處理事先沒有定義過的引數,那麼就要用到前面提到的技巧了。
12 List comprehensions
List comprehensions(串列推導式)可以說是我最喜歡的Python技巧之一。這種運算式可以讓你寫出像自然語言一樣易於理解並且還很簡潔的程式碼。
你可以透過這個連結瞭解更多關於串列推導式的用法。地址:
https://www.learnpython.org/en/List_Comprehensions
13 map
Python有許多非常有用的內建函式。其中一個就是map()——特別是和lambda函式相結合的時候。
在這個例子中,map()對x中的每一個元素都應用了一個簡單的lambda函式。它會傳回一個map物件,這個物件可以被轉化成可迭代物件,如串列或者元組。
14 newspaper3k
newspaper3k,如果你還沒有見過它,那麼你可能會被這個Python newspaper模組所驚艷到。
它可以讓你檢索到一系列國際領先出版物中的新聞和相關的元資料。你可以檢索圖片、文字和作者名。它甚至有一些內建的自然語言處理功能。所以,如果你正在考慮使用BeautifulSoup 或其他自製的爬蟲庫來應用於你的下一個專案。那麼,省省時間和精力吧,你其實只需要$ pip install newspaper3k。
15 Operator overloading(運運算元多載)
Python支援運運算元多載。“運運算元多載”其實是個簡單的概念,你是否曾經想過為什麼Python可以讓你使用“+”運運算元來同時實現加法和連線字串?這就是運運算元多載在發揮作用。
你可以定義使用Python標準運運算元符號的物件,這可以讓你在特定的環境中使用特定的物件,就像下方的例子一樣。
16 pprint
Python的預設print函式可以滿足日常的輸出任務,但如果要列印更大的、巢狀式的物件,那麼使用預設的print函式打印出來的內容會很醜陋。
這個時候我們就需要pprint了,它可以讓複雜的結構型物件以可讀性更強的格式顯示。這對於經常要面對非普通資料結構的Python開發者來說是必不可少的工具。
17 Queue(佇列)
Python支援多執行緒,它是透過標準庫中的Queue模組來實現的。這個模組可以讓你實現佇列資料結構。這種資料結構可以讓你根據特定的規則新增和檢索條目。
“先進先出”(FIFO)佇列可以讓你按照新增物件的順序來檢索他們。“後進先出”(LIFO)佇列可以讓你首先訪問最近新增的物件。最後,優先佇列可以讓你根據他們排序的順序進行檢索。
18 __repr__
當你定義一個類的時候,提供一個方法可以傳回用來表示該類物件的可列印字串會非常有用。例如:
這使得debug更加方便,具體的定義方式如下:
19 sh
sh庫讓你像呼叫方法那樣呼叫系統中的命令。
20 Type hints(型別提示)
Python是一種動態型別語言。當你定義變數、函式、類別的時候,你不需要指定資料的型別。這可以大大提升你的開發速度,但也是有代價的。你可能會因為一個簡單的輸入問題而導致執行出錯。
在Python3.5之後,這就不是問題了,在定義函式的時候你可以自主選擇要不要提供型別提示。
你還可以定義型別的別名:
雖然不是強制性的,型別註釋可以讓你的程式碼理解起來更加簡單。它們也允許你使用型別檢測工具在執行之前捕獲這些零散的型別錯誤。如果你正在從事大型、複雜的專案,那麼型別註釋也許會非常有幫助
21 uuid
透過Python標準庫中的uuid模組,可以快速並簡單地生成統一的唯一ID(又稱UUID).
UUID是128位的全域性唯一識別符號,通常由32位元組的字串表示。它可以保證時間和空間的唯一性,也稱為GUID,全稱為:UUID —— Universally Unique IDentifier,Python 中叫 UUID。它透過MAC地址、時間戳、名稱空間、隨機數、偽隨機數來保證生成ID的唯一性。
22 Virtual environments
這可能是我最喜歡的Python技巧了。你可能經常要處理不止一個Python專案,不幸的是,有時候不同專案會依賴不同的Python版本。這個時候,你應該在系統裡安裝哪個Python版本呢?
幸運的是,Python可以支援建立不同的虛擬環境來滿足不同的版本需求。
現在你可以在一臺機器上安裝和執行各個獨立版本的Python。太棒了!
23 wikipedia
Wikipedia有一個很棒的API,它可以讓使用者透過程式設計訪問到維基的詞條內容。使用Python中的wikipedia模組可以讓你以最便捷的方式訪問該API。
與真實站點一樣,該模組支援多種語言、頁面消除歧義、隨機頁面檢索,甚至還有donate()方法。
24 xkcd(著名Python漫畫)
幽默是Python語言的一個重要特性——畢竟,它是以英國喜劇小品節目《Monty Python’s Flying Circus》(《蒙提·派森的飛行馬戲團》)命名的。Python的許多官方檔案都取用了該劇中的著名情節。
這種幽默感不僅在檔案中可以找到,不信,你可以試試執行下方的程式碼:
你將開啟蘭道爾·門羅的著名幽默漫畫《xkcd》:)
25 YAML
YAML是“YAML不是一種標記語言”的外語縮寫。它是一個資料格式語言,是JSON的父集。和JSON不同的是,它可以儲存更複雜的物件,並且可以取用自身的元素。你還可以寫註釋,這讓YAML特別適合於書寫配置檔案。
PyYAML模組可以讓你使用Python呼叫YAML。使用下列陳述句安裝:
然後匯入到專案中:
PyYAML 使你能夠儲存任何資料型別的Python物件,以及任何使用者定義類的實體。
26 zip
最後一個技巧也非常酷。你是否曾想要讓兩個串列中的元素逐個對映,組合成字典?那麼你應該使用zip。
內建函式zip()接收若干可迭代物件,然後傳回一個由多個元組組成的串列。每個元組根據輸入物件的位置索引對其元素進行分組。還可以使用*zip()來“解壓”物件。
以上就是我想要呈現的所有Python技巧,感謝閱讀,希望大家能從中找到對自己有幫助的技巧。
原文地址:
https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747
文/Peter Gleeson
更多精彩
在公眾號後臺對話方塊輸入以下關鍵詞
檢視更多優質內容!
PPT | 報告 | 讀書 | 書單
Python | 機器學習 | 深度學習 | 神經網路
區塊鏈 | 揭秘 | 乾貨 | 數學
猜你想看
Q: 你還知道哪些好用的Python小技巧?
歡迎留言與大家分享
覺得不錯,請把這篇文章分享給你的朋友
轉載 / 投稿請聯絡:baiyu@hzbook.com
更多精彩,請在後臺點選“歷史文章”檢視