被人工智能捧紅的 Python 已經是一種發展完善且很是多樣化的語言,其中確定有一些你還沒有發現的功能。本文或許可以讓你學到一些新技巧。
Python 是世界上最流行、熱門的編程語言之一,緣由不少,好比:css
本文將分享一些使用 Python 的技巧,順序按照 A-Z 排列。html
all or anyjava
Python 很是受歡迎的緣由之一是其可讀性和表達性。python
人們還常常把 Python 笑稱爲「可執行僞碼(executable pseudocode)」。可是,當你能夠編寫這樣的代碼時,很難去反駁這種言論:git
bashplotlib程序員
想在控制檯中繪圖嗎?github
使用上面的行,便可在控制檯中繪圖。express
collections編程
Python 有一些很棒的默認數據類型,但有時候它們可能不會盡如你意。json
不過,Python 標準庫提供了 collections 模塊。這個方便的附加組件能夠爲你提供更多數據類型。
collections 模塊:https://docs.python.org/3/library/collections.html
dir
你是否想過如何查看 Python 對象內部及其具備哪些屬性?
輸入如下命令行:
當以交互方式運行 Python 時,這多是一個很是有用的功能,而且能夠動態地探索你正在使用的對象和模塊。
想要了解更多,點這裏:https://docs.python.org/3/library/functions.html#dir
emoji
是的,真的有。請點擊這裏:https://pypi.org/project/emoji/
別覺得我不知道你會偷偷試它→→
👍
from __future__ import
Python 流行的一個結果是,總有新版本正在開發中。新版本意味着新功能——除非你的版本已通過時。
不過,別擔憂。__ future__模塊容許用戶導入新版 Python 的功能。這簡直就像時間旅行,或者魔法什麼的。
__ future__模塊:https://docs.python.org/2/library/*future*.html
geopy
地理(Geography)對於程序員來講多是一個具備挑戰性的領域。可是 geopy 模塊讓它變得異常簡單。
geopy 模塊:https://geopy.readthedocs.io/en/latest/
它經過抽取一系列不一樣地理編碼服務的 API 來工做,使用戶獲取一個地方的完整街道地址、緯度、經度,甚至海拔高度。
另一個有用的功能是距離:它能夠用你喜歡的度量單位計算出兩個位置之間的距離。
howdoi
陷入編碼問題,卻不記得之前見過的解決方案?須要檢查 StackOverflow,但不想離開終端?
那麼你須要這個有用的命令行工具:https://github.com/gleitz/howdoi。
不管你有什麼問題均可以問它,它會盡力回答。
可是請注意——它會從 StackOverflow 的最高票答案中抓取代碼。也就是說它提供的信息並不是老是有用……
inspect
Python 的 inspect 模塊很是有助於理解問題背後的詳情。你甚至能夠在 inspect 模塊上調用其方法!
inspect 模塊:https://docs.python.org/3/library/inspect.html
下面的代碼示例使用 inspect.getsource() 打印本身的源代碼。它還使用 inspect.getmodule() 打印定義它的模塊。
最後一行代碼打印出本身的行號。
固然,除了這些瑣碎的用途以外,inspect 模塊還能幫助你理解代碼正在作的事。你還能夠用它編寫自文檔化代碼。
Jedi
Jedi 庫是一個自動完成和代碼分析的庫。它使代碼編寫變得更快、效果更高。
除非你正在開發本身的 IDE,不然你確定會對使用 Jedi 庫做爲編輯插件很感興趣。
Jedi:https://jedi.readthedocs.io/en/latest/docs/usage.html
你可能已經在使用 Jedi 了。IPython 項目就使用 Jedi 實現代碼自動完成功能。
**kwargs
學習任何語言時都會遇到不少里程碑。對於 Python 來講,理解神祕的**kwargs 語法可能算是其中之一。
詞典對象前面的雙星號可讓你把該詞典的內容做爲命名參數輸入到函數中。
詞典的祕鑰是參數名,值是傳遞給函數的值。你甚至不須要稱它爲 kwargs!
當你想編寫可以處理事先未定義的命名參數的函數時,這個頗有用。
列表推導式(List comprehensions)
我最喜歡 Python 編程的緣由之一是它的列表推導式(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。
這些表達式使得編寫乾淨易讀的代碼變得很容易,那些代碼讀起來幾乎像天然語言同樣。
關於它們的更多使用信息請查看:https://www.learnpython.org/en/List_Comprehensions
map
Python 經過許多內置功能支持函數式編程。map() 函數是最有用的函數之一——特別是當它與 lambda 函數結合使用時。
lambda 函數:https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
在上面的例子中,map() 將一個簡單的 lambda 函數應用於 x 中的每一個元素。它返回一個 map 對象,該對象能夠被轉換成可迭代的對象,如列表或元組。
newspaper3k
若是你以前沒有見過它,那麼我建議你先查看:https://pypi.org/project/newspaper3k/。
它能夠幫助你從大量頂級國際出版物中檢索到新聞文章和相關元數據。你能夠檢索圖像、文本和做者名。
它還有一些內置的 NLP 功能。
地址:https://newspaper.readthedocs.io/en/latest/user_guide/quickstart.html#performing-nlp-on-an-article
若是你想在下一個項目中使用 BeautifulSoup 或其它 DIY 網頁抓取庫,那麼不如使用$ pip install newspaper3k,既省時又省事,何樂而不爲呢?
運算符重載(Operator overloading)
Python 支持運算符重載。
它其實是一個簡單的概念。你有沒有想過爲何 Python 容許用戶使用 + 運算符來將數字相加,並級聯字符串?這就是運算符重載在發揮做用。
你可使用 Python 的標準運算符號來定義對象,這樣你能夠在與這些對象相關的語境中使用它們。
pprint
Python 的默認 print 函數就能夠實現打印功能。但若是嘗試打印較大的嵌套對象,就會發現打印結果很醜。
這時 Python 標準庫的 pretty printer 模塊就能夠發揮做用了。該模塊能夠將複雜的結構化對象以一種易讀的格式打印出來。
pretty printer 模塊:https://docs.python.org/3/library/pprint.html
Python 開發者的必備技能之一就是處理複雜的數據結構。
Queue
Python 支持多線程,而這是由 Python 標準庫的 Queue 模塊支持的。
該模塊容許用戶實現隊列(queue)數據結構。隊列數據結構容許用戶根據特定的規則添加和檢索條目。
『First in, first out』 (FIFO) 隊列容許用戶按照對象被添加的順序來檢索對象。『Last in, first out』 (LIFO) 隊列容許用戶首先訪問最新添加的對象。
最後,優先級隊列(priority queue)容許用戶根據對象對應的優先級類別來檢索對象。
如何使用 queue 在 Python 中實現多線程編程,示例詳見:https://www.tutorialspoint.com/python3/python_multithreading.htm。
__repr__
在 Python 中定義一個類別或對象時,以「官方」方式將對象表示爲字符串頗有用。例如:
這使代碼 debug 變得簡單不少。將字符串添加到類別定義,以下所示:
sh
Python 是一種偉大的腳本語言,不過有時使用標準 os 和 subprocess 庫會有點棘手。
sh 庫提供了一種不錯的替代方案。
sh 庫:http://amoffat.github.io/sh/
該庫容許用戶像使用普通函數同樣調用任意程序,這對自動化工做流和任務很是有用。
類型提示(Type hints)
Python 是動態語言。在定義變量、函數、類別等時無需指定數據類型。
這有利於縮短開發週期。可是,簡單的類型錯誤(typing issue)致使的運行時錯誤真的太煩了。
從 Python 3.5 版本開始,用戶能夠選擇在定義函數時開啓類型提示。
你還能夠定義類型別名:
儘管非強制,但類型註釋可使代碼更易理解。
它們還容許你在運行以前使用類型檢查工具捕捉 TypeError。在進行大型複雜項目時執行此類操做是值得的。
uuid
生成通用惟一標識符(Universally Unique ID,UUID)的一種快速簡單方法就是使用 Python 標準庫的 uuid 模塊。
uuid 模塊:https://docs.python.org/3/library/uuid.html
這建立了一個隨機化後的 128 比特數字,該數字幾乎必然是惟一的。
事實上,能夠生成 2¹²²可能的 UUID。這個數字超過了 5,000,000,000,000,000,000,000,000,000,000,000,000。
在給定集合中找出重複數字的可能性極低。即便有一萬億 UUID,重複數字存在的機率也遠遠低於十億分之一。
虛擬環境(Virtual environment)
這多是 Python 中我最喜歡的事物了。
你可能同時處理多個 Python 項目。不幸的是,有時候兩個項目依賴於相同依賴項的不一樣版本。那你要安裝哪一個版本呢?
幸運的是,Python 支持虛擬環境,這使得用戶可以充分利用兩種環境。見下列行:
如今你在一臺機器上具有獨立的多個 Python 版本了。問題解決!
wikipedia
Wikipedia 擁有一個很棒的 API,容許用戶以編程方式訪問巨大致量的免費知識和信息。
wikipedia 模塊使得訪問該 API 很是便捷。
Wikipedia 模塊:https://wikipedia.readthedocs.io/en/latest/quickstart.html
和真實的維基百科網站相似,該模塊支持多種語言、頁面消歧、隨機頁面檢索,甚至還具有 donate() 方法。
xkcd
humour 是 Python 語言的一個關鍵特徵,其名稱來自英國喜劇片《蒙提·派森的飛行馬戲團》(Monty Python and the Flying Circus)。Python 的不少官方文檔引用了該喜劇片最著名的劇情。
幽默感並不限於文檔。試着運行下列行:
將打開 xkcd 畫的 Python 漫畫。不要改變這一點,Python。不要改變。
YAML
YAML 表明 『YAML Ain』t Markup Language』。它是一種數據格式語言,是 JSON 的超集。
與 JSON 不一樣,它能夠存儲更復雜的對象並引用本身的元素。你還能夠編寫註釋,使其尤爲適用於編寫配置文件。
PyYAML 模塊(https://pyyaml.org/wiki/PyYAMLDocumentation)可讓你在 Python 中使用 YAML。安裝:
而後導入到項目中:
PyYAML 使你可以存儲任何數據類型的 Python 對象,以及任何用戶定義類別的實例。
zip
給你支最後一招,很是酷。還在用兩個列表來組成一部詞典嗎?
zip() 內置函數使用多個可迭代對象做爲輸入並返回元組列表。每一個元組按位置索引對輸入對象的元素進行分組。
你也能夠經過調用*zip() 來「解壓」對象。
寫在最後:
本文來自網絡,若有侵權,請聯繫小編刪除!