精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️

加入LINE好友

作者 | Peter Gleeson

譯者 | 婉清

編輯 | Jane

出品 | AI科技大本營

Python 雖然是腳本語言,但是因為其易學,迅速成為科學家的工具,從而積累了大量的工具庫、架構,人工智能涉及大量的數據科學,用 Python 是很自然的事。磨刀不誤砍柴工,要入門人工智能領域,就必須掌握 Python。讓我們來看看 Peter Gleeson 整理的 26 個 Python 有用的技巧。

Python 是世界上最流行、最受歡迎的編程語言之一。原因有很多:

  • 很容易學習;
  • 支持的功能豐富;
  • 有大量的模塊和庫。

作為一名數據科學家,我每天都使用 Python 進行工作。一路走來,我得到了一些有用的技巧和秘訣。

在本文中,我將按照首字母從 A~Z 的順序分享其中一些內容。

這些技巧中的大多數是我在日常工作中使用的或者偶然發現的。其中有一些,是我在瀏覽 Python 標準庫時發現的。另外還有一些是通過在 PyPi 中搜尋得到的。

譯註: PyPI(Python Package Index)是 Python 官方的第三方庫的倉庫,所有人都可以下載第三方庫或上傳自己開發的庫到 PyPI。PyPI 推薦使用 pip 包管理器來下載第三方庫。

https://docs.python.org/3/library/

https://pypi.org/search/

此外,有一家網站非常值得讚賞:Awesome Python,我在這上面發現了四五個技巧。這是一個非常值得瀏覽的精選列表,收錄了數百個有趣的 Python 工具和模塊,有助於激發你的靈感!

譯註: Awesome Python 由 vinta 發起和維護。內容包括:Web 框架、網路爬蟲、網路內容提取、模板引擎、數據庫、數據可視化、圖片處理、文本處理、自然語言處理、機器學習、日志、代碼分析等。

中文版:

https://github.com/jobbole/awesome-python-cn

英文版:

https://awesome-python.com/

all 或 any

Python 如此受歡迎,原因之一是因為它具有可讀性和可表達性。

人們經常開玩笑說 Python 是「可執行的偽代碼」,但是當你可以這樣編寫代碼時,你就很難反駁了。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

bashplotlib

你想在控制台(console)上繪制圖形嗎?

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

這樣你在控制台中就可以繪制圖形了。

collections 模塊

Python 有一些很好的默認數據類型,但有時它們的行為並不完全像你所期望的那樣。

幸運的是,Python 標準庫提供了 collections 模塊,這個方便的附加組件提供了更多的數據類型。參閱:

https://docs.python.org/3/library/collections.html

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

dir

你是否知道如何查看 Python 對象並查看它都有哪些屬性?使用命令行:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

當你通過交互方式來運行 Python,並動態地探索你正在使用的對象和模塊時,這一功能就非常有用了。要了解更多信息請訪問:

https://docs.python.org/3/library/functions.html#dir

Emoji

如何打出 emoji 表情?參閱:

https://pypi.org/project/emoji/

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

不要跟我說你不會去嘗試噢~?

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

from __future__ import

Python 如此廣受歡迎還有一個原因是它總是開發新版本。要知道,新版本意味著有新功能。但你不必害怕所用的版本過時了。這個__future__模塊可以讓你在現有版本上導入 Python 未來版本的功能。這一特徵就好像時間旅行機一樣,讓未來的東西穿越到現在來使用。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

為什麼不去導入花括號呢?請參見 stackoverflow 上的問答:

https://stackoverflow.com/questions/17811855/syntax-error-not-a-chance

geopy 模塊

對工程師來說,地理環境可能是一個具有挑戰性的領域。但是,有了 geopy 模塊,這一切就都變得簡單了。參閱:

https://geopy.readthedocs.io/en/latest/

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

geopy 模塊是通過抽象出一系列不同的地理編碼服務的 API 來工作。它可以讓你獲得某一地點的完整街道地址、維度、精度甚至海拔高度。

還有一個有用的距離類。它可以使用你喜歡的測量單位來計算兩個位置之間的距離。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

howdoi

你有沒有遇到過這樣的困境:遇到編碼的問題忘記了以前見過的解決方案,或者需要檢查 StackOverflow,但又不想離開終端。

要擺脫這一困境,你需要這個有用的命令行工具——howdoi,參閱:

https://github.com/gleitz/howdoi

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

有了 howdoi,無論你問它什麼問題,它都會盡力回答。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

但有一點要注意的是:howdoi 是從 StackOverflow 的熱門答案中抓取代碼,它提供的信息可能不是最有用的。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

譯註: Stack Overflow 是一個與程序相關的 IT 技術問答網站。用戶可以在網站免費提交問題,瀏覽問題,索引相關內容,在創建主頁的時候使用簡單的 HTML。在問題頁面,不會彈出任何廣告,銷售信息,Java 窗口等。 2008 年由 Jeff Atwood 和 Joel Spolsky 創建。

inspect 模塊

PYthon 的 inspect 模塊對於理解幕後發生的事情非常有用。你甚至可以自己調用它的方法!參閱:

https://docs.python.org/3/library/inspect.html

如下所示的代碼段,使用了inspect.getsource()來列印自己的源代碼。它還使用了 inspect.getsource()來列印定義它的模塊。

最後一行代碼列印出自己的行號。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

當然,除去這些簡單的用途之外,inspect 模塊對於理解代碼的作用也非常有用。你也可以使用它來寫自編文檔代碼。

Jedi

Jedi 庫是一個自動完成和代碼分析的庫。它能夠使編寫代碼更為快速、更為高效。

除非你正在開發自己的 IDE,否則你可能對使用 Jedi 作為編輯器插件最感興趣。幸運的是,現在加載這個插件已經可以用了!不過,你可能已經用上Jedi 了。IPython 項目的代碼自動完成功能就是使用Jedi來做到的。

https://jedi.readthedocs.io/en/latest/docs/usage.html

**kwargs

在學習任何語言的過程中,都會遇到許多里程碑。使用Python,理解神秘的 **kwargs語法可能就是其中之一。

dictionary 對象前面的雙星號允許您將該 dictionary 的內容作為命名參數傳遞給函數。詳見:

https://docs.python.org/3/tutorial/controlflow.html#keyword-arguments

dictionary 的鍵是參數名,值是傳遞給函數的值。你甚至不需要叫它 kwargs!

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

當你想編寫可以處理未預先定義的命名參數的函數時,這就非常有用了。

List Comprehensions

關於 Python 編程,我最喜歡的事情之一是它的列表生成式(List Comprehensions),參見:

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

這些表達式可以很容易編寫出簡潔的代碼,讀起來幾乎就像自然語言一樣。你可以訪問下面的網址來了解 List Comprehensions 應該要怎麼使用:

https://www.learnpython.org/en/List_Comprehensions

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

map

Python 是通過許多內置功能支持函數式變成。其中最有用的函數之一是 map()函數,特別是這個函數與 lambda 函數結合使用時。參閱:

https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

在如上所示的代碼段中,map()對每個元素 x都應用了一個簡單的 lambda 函數。它返回一個 map 對象,這個對象可以轉換為某些可迭代的對象,例如 listh 或 tuple。

newspaper3k 模塊

如果你還沒見過它,那你見到 Python 的 newspaper 模塊可不要被它震撼到了。參閱:

https://pypi.org/project/newspaper3k/

這個模塊可以讓你從一系列領先的國際出版物中檢索新聞文章和相關的元數據。你可以檢索圖像、文本和作者姓名。

它甚至內置了一些 NLP 功能

詳見:

https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article

如果你想為你的項目使用 BeautifulSoup 或其他一些自己打造的 webscraping 庫,你可以用 $ pip install newspaper3k為你節省時間和精力。

Operator overloading

Python 提供了對運算符重載的支持。

詳見:

https://docs.python.org/3/reference/datamodel.html#special-method-names

其實這是一個簡單的概念。有沒有想過為什麼 Python 允許使用 +運算符來添加數字和連接字符串?這就是運算符重載的功勞。

你可以按照自己的特定方式定義使用 Python 標準運算符符號的對象。這樣,你就可以在正在使用的對象相關的上下文中使用它們。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

譯註:運算符重載(operator overloading),簡單地說,就是對已有的運算符重新進行定義,賦予其另一種功能,以適應不同的數據類型。

pprint

Python 的默認 print函數可以完成列印作業。但是如果嘗試讓 Python 列印任何大型的嵌套對象,列印結果會非常難看。

這就要用到 Python 標準庫中的 pretty-print 模塊了。這個模塊能夠以易於閱讀的格式列印出複雜的結構化對象。參閱:

https://docs.python.org/3/library/pprint.html

這個模塊對於任何使用複雜數據結構的 Python 開發者來說都是必備的。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

Queue

Python 支持多線程,可以通過標準庫的 Queue 模塊來做到。

這個模塊可以讓你做到隊列數據結構。這些數據結構允許你根據特定規則添加和檢索條目。

「先進先出」(FIFO)隊列允許你按照添加對象的次序來檢索對象。「後進先出」(LIFO)隊列允許你首先訪問最近添加的對象。

最後,優先級隊列允許你根據對象的排序次序來檢索對象。Python 使用隊列進行多線程變成的示例可參見:

https://www.tutorialspoint.com/python3/python_multithreading.htm

__repr__

在 Python 中定義類或對象時,提供一種將該對象表示為字符串的「官方」方法是很有用的。例如:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

這使得代碼的調試變得更加容易。將其添加到你的類定義中,如下所示:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

▌sh

Python 是一種很棒的腳本語言,但有時候使用標準的操作系統和子進程庫會讓人有點頭疼。

sh 庫提供了一個簡潔的替代方法。

http://amoffat.github.io/sh

sh 庫允許你像普通函數一樣調用任何程序,這點對於自動化工作流和任務非常有用,所有這些都來自 Python 內部。

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

Type hints

Python 是一種動態類型的語言。在定義變量、函數、類等時,不需要指定數據類型。

這一特性讓開發者能夠快速開發項目。但是,很少有比簡單的輸入問題導致的運行時錯誤更煩人的事情了。

從 Python 3.5 開始,你就可以選擇在定義函數時提供 type hintsl 。詳見:

https://docs.python.org/3/library/typing.html

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

你可以這樣定義類型別名:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

雖然定義類型別名不是強制性的,但是類型註釋可以讓你的代碼更容易理解。

它們還允許你使用類型檢查工具在運行時之前捕獲那些零散的 TypeErrors。如果你正在開發大型複雜的項目,那麼這很可能是值得一試的!

uuid

通過 Python 標準庫的 uuid 模塊,可以快速簡單地生成通用唯一 ID(或「uuid」)。詳見:

https://docs.python.org/3/library/uuid.html

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

uuid 模塊會創建一個隨機的 128 位數字,幾乎可以肯定是唯一的。

實際上,可以生成超過 2¹²² 個可能 UUID,這一數字超過了5,000,000,000,000,000,000,000,000,000,000,000,000(數字 5 後面有 36 個數字 0)。

在給定的集合中找到重復的概率非常低。即使有一萬億的 uuid,重復存在的概率也遠遠小於十億分之一。

用兩行代碼就做到了,還是很不錯的。

譯註: uuid 是通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟件建構的標準,亦為開放軟件基金會組織在分布式計算環境領域的一部分。其目的是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。如此一來,每個人都可以創建不與其它人衝突的uuid。在這樣的情況下,就不需考慮數據庫創建時的名稱重復問題。

Virtual environments

這可能是 Python 中我最喜歡的部分了。

你有可能同時會處理多個 Python 項目。然而不幸的是,有時兩個項目會依賴於相同依賴關係的不同版本。你在系統上都安裝了哪些版本的依賴關係呢?

幸運的是,Python 對虛擬環境的支持,參見:

https://docs.python.org/3/tutorial/venv.html

可以讓你充分這兩個項目的優點。在命令行輸入如下內容:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

現在,你可以在同一台機器上安裝、運行Python不同的獨立版本。

wikipedia

Wikipedia 有一個很棒的 API,它允許用戶通過編程方式訪問無與倫比的、完全免費的知識和信息。

wikipedia 模塊使訪問這個 API 變得非常方便。

https://wikipedia.readthedocs.io/en/latest/quickstart.html

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

與真實網站一樣,該模塊支持多種語言、頁面消歧、隨機頁面檢索,甚至還有 donate()方法。

譯註: Wikipedia,是一個基於維基技術的多語言百科全書協作計劃,用多種語言編寫的網路百科全書。

xkcd

幽默是 Python 語言的一個重要特徵——畢竟,它是以英國喜劇小品節目 Monty Python 的飛行馬戲團命名的。Python 的許多官方文檔都參考了該劇最著名的短劇。詳見:

https://en.wikipedia.org/wiki/Monty_Python%27s_Flying_Circus

然而,這些幽默並不局限於文檔,試一試下面的運行方式:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

絕不改變,Python。永不改變。

YAML

YAML 代表的是「YAML Ain’t Markup Language」,它是一種數據格式化語言,是 JSON 的超集。詳見:

http://yaml.org/

與 JSON 不同,它可以存儲更複雜的對象並引用自己的元素。你還可以編寫註釋,使其特別適合於編寫配置文件。

PyYAML 模塊允許你在 Python 中使用 YAML。先安裝 PyYAML:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

然後導入到你的項目中:

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

PyYAML 允許你存儲任何數據類型的 Python 對象,以及任何用戶定義類的實例。

詳見:

https://pyyaml.org/wiki/PyYAMLDocumentation

YAML 是一種簡潔的非標記語言。YAML 以數據為中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。它是一種直觀的能夠被電腦識別的數據序列化格式,是一個可讀性高並且容易被人類閱讀,容易和腳本語言交互,用來表達資料序列的編程語言。它是類似於標準通用標記語言的子集 XML 的數據描述語言,語法比 XML 簡單很多。

zip

這是本文最後的一個技巧了,非常酷!你有沒有過需要從兩個列表中創建一個字典的想法呢?

精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!

zip()內置函數接受許多可迭代對象並返回元組列表。每個元組根據對象的位置索引對其元素進行分組。

你還可以通過調用 *zip()來「解壓縮」對象。

原文鏈接:

https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747

【完】

About 尋夢園
尋夢園是台灣最大的聊天室及交友社群網站。 致力於發展能夠讓會員們彼此互動、盡情分享自我的平台。 擁有數百間不同的聊天室 ,讓您隨時隨地都能找到志同道合的好友!