精選 26 個 Python 實用技巧,想秀技能先 Get 這份技術列表!
作者 | 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 是“可執行的虛擬碼”,但是當你可以這樣編寫程式碼時,你就很難反駁了。
▌bashplotlib
你想在控制檯(console)上繪製圖形嗎?
這樣你在控制檯中就可以繪製圖形了。
▌collections 模組
Python 有一些很好的預設資料型別,但有時它們的行為並不完全像你所期望的那樣。
幸運的是,Python 標準庫提供了 collections 模組,這個方便的附加元件提供了更多的資料型別。參閱:
https://docs.python.org/3/library/collections.html
▌dir
你是否知道如何檢視 Python 物件並檢視它都有哪些屬性?使用命令列:
當你通過互動方式來執行 Python,並動態地探索你正在使用的物件和模組時,這一功能就非常有用了。要了解更多資訊請訪問:
https://docs.python.org/3/library/functions.html#dir
▌Emoji
如何打出 emoji 表情?參閱:
https://pypi.org/project/emoji/
不要跟我說你不會去嘗試噢~?
▌from __future__ import
Python 如此廣受歡迎還有一個原因是它總是開發新版本。要知道,新版本意味著有新功能。但你不必害怕所用的版本過時了。這個__future__模組可以讓你在現有版本上匯入 Python 未來版本的功能。這一特徵就好像時間旅行機一樣,讓未來的東西穿越到現在來使用。
為什麼不去匯入花括號呢?請參見 stackoverflow 上的問答:
https://stackoverflow.com/questions/17811855/syntax-error-not-a-chance
▌geopy 模組
對程式設計師來說,地理環境可能是一個具有挑戰性的領域。但是,有了 geopy 模組,這一切就都變得簡單了。參閱:
https://geopy.readthedocs.io/en/latest/
geopy 模組是通過抽象出一系列不同的地理編碼服務的 API 來工作。它可以讓你獲得某一地點的完整街道地址、維度、精度甚至海拔高度。
還有一個有用的距離類。它可以使用你喜歡的測量單位來計算兩個位置之間的距離。
▌howdoi
你有沒有遇到過這樣的困境:遇到編碼的問題忘記了以前見過的解決方案,或者需要檢查 StackOverflow,但又不想離開終端。
要擺脫這一困境,你需要這個有用的命令列工具——howdoi,參閱:
https://github.com/gleitz/howdoi
有了 howdoi,無論你問它什麼問題,它都會盡力回答。
但有一點要注意的是:howdoi 是從 StackOverflow 的熱門答案中抓取程式碼,它提供的資訊可能不是最有用的。
譯註: Stack Overflow 是一個與程式相關的 IT 技術問答網站。使用者可以在網站免費提交問題,瀏覽問題,索引相關內容,在建立主頁的時候使用簡單的 HTML。在問題頁面,不會彈出任何廣告,銷售資訊,JavaScript 視窗等。 2008 年由 Jeff Atwood 和 Joel Spolsky 建立。
▌inspect 模組
PYthon 的 inspect 模組對於理解幕後發生的事情非常有用。你甚至可以自己呼叫它的方法!參閱:
https://docs.python.org/3/library/inspect.html
如下所示的程式碼段,使用了 inspect.getsource() 來列印自己的原始碼。它還使用了 inspect.getsource() 來列印定義它的模組。
最後一行程式碼列印出自己的行號。
當然,除去這些簡單的用途之外,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!
當你想編寫可以處理未預先定義的命名引數的函式時,這就非常有用了。
▌List Comprehensions
關於 Python 程式設計,我最喜歡的事情之一是它的列表生成式(List Comprehensions),參見:
https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions
這些表示式可以很容易編寫出簡潔的程式碼,讀起來幾乎就像自然語言一樣。你可以訪問下面的網址來了解 List Comprehensions 應該要怎麼使用:
https://www.learnpython.org/en/List_Comprehensions
▌map
Python 是通過許多內建功能支援函式式變成。其中最有用的函式之一是 map() 函式,特別是這個函式與 lambda 函式結合使用時。參閱:
https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
在如上所示的程式碼段中,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 標準運算子符號的物件。這樣,你就可以在正在使用的物件相關的上下文中使用它們。
譯註:運算子過載(operator overloading),簡單地說,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。
▌pprint
Python 的預設 print 函式可以完成列印作業。但是如果嘗試讓 Python 列印任何大型的巢狀物件,列印結果會非常難看。
這就要用到 Python 標準庫中的 pretty-print 模組了。這個模組能夠以易於閱讀的格式列印出複雜的結構化物件。參閱:
https://docs.python.org/3/library/pprint.html
這個模組對於任何使用複雜資料結構的 Python 開發者來說都是必備的。
Queue
Python 支援多執行緒,可以通過標準庫的 Queue 模組來實現。
這個模組可以讓你實現佇列資料結構。這些資料結構允許你根據特定規則新增和檢索條目。
“先進先出”(FIFO)佇列允許你按照新增物件的次序來檢索物件。“後進先出”(LIFO)佇列允許你首先訪問最近新增的物件。
最後,優先順序佇列允許你根據物件的排序次序來檢索物件。Python 使用佇列進行多執行緒變成的示例可參見:
https://www.tutorialspoint.com/python3/python_multithreading.htm
▌__repr__
在 Python 中定義類或物件時,提供一種將該物件表示為字串的“官方”方法是很有用的。例如:
這使得程式碼的除錯變得更加容易。將其新增到你的類定義中,如下所示:
▌sh
Python 是一種很棒的指令碼語言,但有時候使用標準的作業系統和子程式庫會讓人有點頭疼。
sh 庫提供了一個簡潔的替代方法。
http://amoffat.github.io/sh
sh 庫允許你像普通函式一樣呼叫任何程式,這點對於自動化工作流和任務非常有用,所有這些都來自 Python 內部。
▌Type hints
Python 是一種動態型別的語言。在定義變數、函式、類等時,不需要指定資料型別。
這一特性讓開發者能夠快速開發專案。但是,很少有比簡單的輸入問題導致的執行時錯誤更煩人的事情了。
從 Python 3.5 開始,你就可以選擇在定義函式時提供 type hintsl 。詳見:
https://docs.python.org/3/library/typing.html
你可以這樣定義型別別名:
雖然定義型別別名不是強制性的,但是型別註釋可以讓你的程式碼更容易理解。
它們還允許你使用型別檢查工具在執行時之前捕獲那些零散的 TypeErrors。如果你正在開發大型複雜的專案,那麼這很可能是值得一試的!
▌uuid
通過 Python 標準庫的 uuid 模組,可以快速簡單地生成通用唯一 ID(或“uuid”)。詳見:
https://docs.python.org/3/library/uuid.html
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
可以讓你充分這兩個專案的優點。在命令列輸入如下內容:
現在,你可以在同一臺機器上安裝、執行Python不同的獨立版本。
▌wikipedia
Wikipedia 有一個很棒的 API,它允許使用者通過程式設計方式訪問無與倫比的、完全免費的知識和資訊。
wikipedia 模組使訪問這個 API 變得非常方便。
https://wikipedia.readthedocs.io/en/latest/quickstart.html
與真實網站一樣,該模組支援多種語言、頁面消歧、隨機頁面檢索,甚至還有 donate() 方法。
譯註: Wikipedia,是一個基於維基技術的多語言百科全書協作計劃,用多種語言編寫的網路百科全書。
▌xkcd
幽默是 Python 語言的一個重要特徵——畢竟,它是以英國喜劇小品節目 Monty Python 的飛行馬戲團命名的。Python 的許多官方文件都參考了該劇最著名的短劇。詳見:
https://en.wikipedia.org/wiki/Monty_Python%27s_Flying_Circus
然而,這些幽默並不侷限於文件,試一試下面的執行方式:
絕不改變,Python。永不改變。
▌YAML
YAML 代表的是“YAML Ain’t Markup Language”,它是一種資料格式化語言,是 JSON 的超集。詳見:
http://yaml.org/
與 JSON 不同,它可以儲存更復雜的物件並引用自己的元素。你還可以編寫註釋,使其特別適合於編寫配置檔案。
PyYAML 模組允許你在 Python 中使用 YAML。先安裝 PyYAML:
然後匯入到你的專案中:
PyYAML 允許你儲存任何資料型別的 Python 物件,以及任何使用者定義類的例項。
詳見:
https://pyyaml.org/wiki/PyYAMLDocumentation
YAML 是一種簡潔的非標記語言。YAML 以資料為中心,使用空白,縮排,分行組織資料,從而使得表示更加簡潔易讀。它是一種直觀的能夠被電腦識別的資料序列化格式,是一個可讀性高並且容易被人類閱讀,容易和指令碼語言互動,用來表達資料序列的程式語言。它是類似於標準通用標記語言的子集 XML 的資料描述語言,語法比 XML 簡單很多。
▌zip
這是本文最後的一個技巧了,非常酷!你有沒有過需要從兩個列表中建立一個字典的想法呢?
zip() 內建函式接受許多可迭代物件並返回元組列表。每個元組根據物件的位置索引對其元素進行分組。
你還可以通過呼叫 *zip() 來“解壓縮”物件。
原文連結:
https://medium.freecodecamp.org/an-a-z-of-useful-python-tricks-b467524ee747
【完】
熱 文 推 薦
☞ ofo 銀行賬戶凍結;12306 事件嫌疑人被捕;京東劉強東放權二把手 | 極客頭條
☞ 新年到,獻給從一線工程師到CTO的實用指南:《2019區塊鏈開發者報告》
☞ 年後跳槽BAT必看:10種資料結構、演算法和程式設計課助你面試通關
print_r('點個好看吧!');
var_dump('點個好看吧!');
NSLog(@"點個好看吧!");
System.out.println("點個好看吧!");
console.log("點個好看吧!");
print("點個好看吧!");
printf("點個好看吧!\n");
cout << "點個好看吧!" << endl;
Console.WriteLine("點個好看吧!");
fmt.Println("點個好看吧!");
Response.Write("點個好看吧!");
alert("點個好看吧!")
echo "點個好看吧!"
點選“閱讀原文”,開啟 CSDN App 閱讀更貼心!
喜歡就點選“好看”吧!相關文章
- 精選22個Python實用技巧,秀技能必備這份技術列表!Python
- 想摸魚嗎?先掌握這 19 個 css 技巧!CSS
- 秒啊,速來get這9個jupyter實用技巧
- 技術管理者的幾個實用技巧
- GitHub 的 12 個實用技巧,你 get 了幾個?Github
- 請教這個應用技術如何實現?
- Vim 實用技術,第 1 部分: 實用技巧
- 想提高團隊技術,來試試這個套路!
- 26個精選的JavaScript面試問題JavaScript面試
- 每個優秀程式設計師必須具備的技術技能程式設計師
- 想拿高薪offer?寫好一份技術簡歷的技巧很重要!高薪
- 未來Web應用的前端技術選型暢想Web前端
- 超實用!7 個優秀的 UI 互動動畫技巧UI動畫
- 想學IT技術,這份高薪熱門崗位清單你不能錯過!高薪
- 【魅族大賽技術公開課】移動應用開發技術精選
- 如果有人讓你推薦Python技術書,請讓他看這個列表Python
- 10個優秀個android專案,精選|快速開發Android
- 技術:超級實用的電腦小技巧
- TypeScript 隨想 · 實際應用與技巧TypeScript
- 這是什麼選秀節目?數百萬人看後想學「機器學習」機器學習
- golang技術文章精選(2019)Golang
- 推薦兩個實用技術
- 技術選型:效率至上與實用至上
- 10月22日雲棲精選夜讀|幾個實用的SpringBoot小技巧分享Spring Boot
- get到這個Word技巧,輕鬆縮短工作時間!
- 必知必會的8個Python列表技巧Python
- 100 個容器技術相關技能棧
- 國外精選32個優秀天氣APP介面設計APP
- 科學-技術-技能
- 一份python實用”技巧“清單(按字母順序)Python
- 2021 中國技術先鋒年度評選啟動,增加新銳技術先鋒企業榜
- web技術分享| 虛擬列表實現Web
- Python 基礎起步 (八) 字典實用技巧大全,申精幹貨,必看!Python
- Python 實用技巧(上)Python
- MongoDB 資源、庫、工具、應用程式精選列表中文版MongoDB
- 你與資料科學家只差這26條python技巧資料科學Python
- Laravel-admin 資源精選列表Laravel
- Java程式設計師必看:技術大牛都在用這四個小技巧Java程式設計師