精選14條 PyCharm 實用技巧

原創:python開發社區 Python開發社區

今天主要跟大家介紹PyCharm的高效使用技巧!

以下代碼演示是在 Mac 環境下,Windows 也類似,Command 鍵 相當於 Windows 上的 Control 鍵。

1. 代碼排版,自動PEP8

pep8 是Python 語言的一個代碼編寫規範。如若你是新手,目前只想快速掌握基礎,而不想過多去注重代碼的的編寫風格(雖然這很重要),那你可以嘗試一下這個工具 - autopep8

首先在全局環境中(不要在虛擬環境中安裝),安裝一下這個工具。

sudo pip install autopep8


然後在 Pycharm 裡導入這個工具。

Name: AutoPep8
Description: autopep8 your code
Program: autopep8
Arguments: --in-place --aggressive --aggressive $FilePath$
Working directory: $ProjectFileDir$
Output filters: $FILE_PATH$\\:$LINE$\\:$COLUMN$\\:.*
精選14條 PyCharm 實用技巧

我隨意寫了一段不符合 pep8 規範的代碼。

精選14條 PyCharm 實用技巧

點擊右鍵,選擇 External Tools -> AutoPep8

精選14條 PyCharm 實用技巧

看一下效果,還是挺明顯的。

精選14條 PyCharm 實用技巧

你可能會說,Pycharm 本身就自帶這個功能了呀,快捷鍵 Command+Option+L ,就可以實現一鍵pep8了。你可以對比一下,Pycharm 自帶的代碼 pep8 化功能 並沒有像這個autopep8 來得徹底。我相信你最終的選擇肯定是後者。

2. 誤刪文件,一秒找回

上週,由於自己的誤操作,在沒有任何備份的情況下,將一個自己寫了兩個星期的項目給刪除了。待我回頭神來的時候,我甚至都記不起是何時進行的刪除操作。

做為一名老司機,當然是臨危不懼地打開了回收站,進行一番搜尋,幾個月沒有清理過的回收站,真是一片狼藉,什麼 jpg,avi 都有,不堪入目呀。

我用一分鐘快速瀏覽了一下,沒有發現我要找的那幾個 py 文件,我心想,應該是文件太多了,看叉掉了。由於項目是最近寫的,文件名我還清楚地記得,既然有文件名,那就利用windows 自帶的搜索功能,結果還是沒有,這下我才開始意識到事態的嚴重性,文件可能真的「沒了」。

我已經很久沒有清理過回收站了,為什麼回收站裡會沒有我的文件呢?

我想這可能是一次非同尋常的 delete,會不會是在 Pycharm 裡的 發起刪除操作,不會往回收站裡丟呢?經過一番測試,在回收站還真的找不著,但是這次嘗試也無意中發現了 Pycharm 的隱藏的一個功能 Local History,它會保存你對文件的所有操作記錄。

就拿我的剛剛測試的文件來舉例,我先是新建了一個文件,然後對在這個文件裡添加了幾行代碼。最後我將這個文件刪除了。

此時你可以在你的項目目錄裡,點擊右鍵,有個 Local History 的選項,再點擊子選項 Show History,你可以看到這裡有個記錄板。如果你想恢復刪除的文件,就在刪除的記錄項點擊右鍵,選擇 Revert 即可恢復。

精選14條 PyCharm 實用技巧

3. 擁抱Vim,遠離鼠標

在大多數場景之下,使用鼠標的效率和精準度,是遠不如鍵盤快捷鍵的(前提是你已經相當熟練的掌握了快捷鍵),這個你得承認吧。

Vi 可以滿足你對文本操作的所有需求,比可視化界面更加效率,更加 geek。如果你和我一樣,是忠實的 vim 粉。在安裝完 Pycharm 完後,肯定會第一時間將 ideaVim 這個插件也裝上,它可以讓我們在 Pycharm 中 使用 vim 來編輯代碼。

安裝方法如下,安裝完後需要重啟 Pycharm 生效。

精選14條 PyCharm 實用技巧

4. 代碼模板,效率編碼

Pycharm 提供的這個代碼模板,可以說是相當實用的一個功能了。它可以在你新建一個文件時,按照你預設的模板給你生成一段內容,比如解釋器路徑,編碼方法,作者詳細信息等

精選14條 PyCharm 實用技巧

按照上圖模板,生成的效果如下。

精選14條 PyCharm 實用技巧

除了新建文件時可以初始化文件,在開發編寫代碼時,也同樣使用 Pycharm 中自帶的實用的代碼模板,提高你的編碼效率。

當你在鍵盤中敲入 Command + J 時,就可以調出一個面板,從下圖可以看出裡面有許多預設的模板。

精選14條 PyCharm 實用技巧

如果我們想選擇最後一個 main ,可以繼續鍵入 main,然後就可以直接生成如下這段平時都要手動敲入的代碼。

精選14條 PyCharm 實用技巧

這裡再舉個例子,for 循環 可以這樣寫。

精選14條 PyCharm 實用技巧

5. 使用書籤,快速定位

都我在看框架的源代碼時,最常使用的是 Command + B (也就是 command + 鼠標左鍵 )一層一層地往裡深入,但是當源代碼比較多,可能一整個事件過程涉及十幾文件,函數調用錯綜複雜,對於一個龐大的項目來說,有用的可能就幾個關鍵函數,每次要找到這幾個函數,都要重頭從源函數再一層一層的找下去,這樣實在太麻煩了,我常常因此把自己給看暈了。

直到後來我發現了 Pycharm 這個書籤功能。

使用書籤功能,我可以在在關鍵的位置打上書籤,想看的時候,調用書籤,快速定位即可。

使用它,你需要記住下面下幾個快捷鍵

Command + F11 打上書籤
Shift + F11 展示所有書籤
F11 刪除書籤(經測試僅能在Windows上有效)

在你要打書籤的位置,按下 Command + F11 ,你可以給這個位置加個序號,可以是數字也可以是字母,假如在下面這個位置 加了 1 這個序號,下次你就可以使用 Control + 1 直接跳轉到這個位置。

精選14條 PyCharm 實用技巧


當然你也可以不加,不加的話就是匿名書籤了。你可以使用 Shift + F11 展示所有的書籤,再進行跳轉。

6. 神一樣的調試技巧

假如我們在一個爬蟲的項目中,會使用到 正則表達式 來匹配我們想要抓取的內容。正則這種東西,有幾個人能夠一步到位的呢,通常都需要經過很多次的調試才能按預期匹配。在我們改了一次正則後,運行了下,需要重新向網站抓取請求,才能發現沒有匹配上,然後又改了一版,再次運行同樣需要發起請求,結果還是發現還是沒有匹配上,往往復復,正則不好的同學可能要進行幾十次的嘗試。

(上面這個例子可能不太貼切,畢竟是有很多種方法實現不用重新發請求,只是列舉了一種很笨拙且低效的調試過程,你看看就好了)

而我們在這幾十次的調試中,向同一網站發起請求都是沒有意義的重複工作。如果在 Pycharm 中可以像 IPython Shell 和 Jupyter Notebook 那樣,可以記住運行後所有的變量信息,可以在不需要重新運行項目或腳本,只需稍微調整下我們的代碼,直接就可以進行正則調試。

答案當然是有。

假如我在調試如下幾行簡單的代碼。在第 3 行處打了個斷點。然後點擊圖示位置 Show Python Prompt 按鈕。

精選14條 PyCharm 實用技巧

就進入了 Python Shell 的界面,這個Shell 環境和我們當前運行的程序環境是打通的,使用的是同一個 namespace,這下你可以輕鬆地進行調試了。

精選14條 PyCharm 實用技巧

上面我們打了個斷點,是為了方便說明這個效果。並不是說一定要打斷點。如果不打斷點,在腳本執行完成後,也仍然可以在這個界面查看並操作所有變量。


精選14條 PyCharm 實用技巧


現在我們已經可以滿足我們的調試的需求,但是每次運行腳本,都要手動點擊 Show Python Prompt ,有點麻煩。嗯?其實這個有地方可以設置默認打開的。這個開頭還比較隱秘,一般人還真發現不了。

你需要點擊圖示位置 Edit Configurations 處。

精選14條 PyCharm 實用技巧

然後在這裡打勾選中。

精選14條 PyCharm 實用技巧

設置上之後,之後你每次運行後腳本後,都會默認為你存儲所有變量的值,併為你打開 console 命令行調試界面。

除了上面這種方法,其實還有一種方法可以在調試過程中,執行命令表達式,而這種大家可能比較熟悉了,這邊也提一下,就當是彙總一下。但是從功能上來說,是沒有上面這種方法來得方便易用的。因為這種方法,必須要求你使用 debug 模式運行項目,並打斷點。

使用方法就是,在你打了斷點後,在圖示位置處,點擊右鍵使用 Evaluate Expression

精選14條 PyCharm 實用技巧

就彈出了一個 Evaluate Expression 窗口,這裡 可以運行命令表達式,直接操作變量。

精選14條 PyCharm 實用技巧

7. 指定參數執行腳本

你在 Pycharm 運行你的項目,通常是怎麼執行的?我的做法是,右鍵,然後點擊 Run,或者使用快捷鍵 Shift + F10 。

有時候,在運行/調試腳本的時候,我們需要指定一些參數,這在命令行中,直接指定即可。

假設在命令行中,運行腳本的命令是這樣

python main.py init --local


對於剛使用 Pycharm 的同學,可能並不知道 Pycharm 也是可以指定參數的。點擊下圖位置

精選14條 PyCharm 實用技巧

進入設置面板,在 Script parameters 中填入參數即可。

精選14條 PyCharm 實用技巧

同時在上圖的底部,你可以看到,這裡可以很方便的切換 解釋器,比你跑到這邊來要容易得多吧

精選14條 PyCharm 實用技巧

8. 搜索時過濾測試文件

接下來,介紹一個,我看框架源碼的時的一個小技巧,可能只適用一小部分人吧。

我平時會看的框架是 OpenStack ,我不知道其他框架是怎樣的,但在 OpenStack 裡面帶有大量(真的很多)的單元測試文件。這給我在使用 Find in Path 時帶來了不小的困擾,你可以從下圖的搜索結果中感受一下,搜索一個函數,test 文件裡的結果比 正常文件要多很多。

精選14條 PyCharm 實用技巧

這些測試文件的搜索結果,對於我們看源代碼不僅沒有任何幫助的,更重要的是還干擾視線。於是我就研究了一下,從文件名入手,只要在 File mask 裡填寫 !test* 可以將這些test文件過濾掉。搜索結果一下子清晰很多。

精選14條 PyCharm 實用技巧

9. 關閉煩人的燈泡提示

本來沒有想寫這個的,但是知乎上有一位朋友有這個需求,那我研究了下。


精選14條 PyCharm 實用技巧


先來說下這個燈泡提示是什麼,有什麼用?

當我們在代碼裡面有語法錯誤,或者代碼編寫不符合 pep8 代碼規範時,鼠標選擇有問題的代碼,就會自動彈出小燈泡,這個燈泡是有顏色之分的,如果是紅燈泡,一般都是語法問題,如果不處理會影響代碼運行。而如果是黃燈泡,就只是一個提示,提示你代碼不規範等,並不會影響程序的運行。

雖然這個燈泡,是出於善意之舉,但我認為它確實有點多餘(可能是我個人沒有使用它的習慣),要是語法錯誤會有紅色波浪線提示。你可能會說燈泡不僅起到提示的作用,它還可以自動糾正代碼,我個人感覺並沒有人工校正來得效率,來得精準。

基於有時還會像知乎上這個朋友說的這樣,會擋住我們的代碼,會經常誤點,這確實也是一個煩惱。

我研究了下,Pycharm (2018版本)裡是有開關按鈕的,將下圖中的這個選項(Show intention bulb)取消勾選,就可以關閉這個功能。

精選14條 PyCharm 實用技巧

10. 關閉礙眼的波浪線

下面我先給出了一小段代碼示例,思考一下,為什麼name,my_name 不會有波浪線,而 myname 和 wangbm 會有波浪線呢?

精選14條 PyCharm 實用技巧

Pycharm 本身會實時地對變量名進行檢查,如果變量名不是一個已存在的英文單詞,就會出現一條波浪線,當一個變量裡有多個單詞時,Python 推薦的寫法是用下劃線來分隔(其他語言可能會習慣使用駝峰式命名法 ,但 Python 是使用下劃線),所以在 Pycharm 看來 my_name 是規範的,而 myname 會被當成是一個單詞對待,由於它在單詞庫裡並沒有它,所以 myname 是不規範的。

每個人的變量命名習慣不一樣,如何你在項目裡大量使用了 myname 這種風格的變量命名方法,像下面這樣(隨便找了一段 cloudinit 的代碼),是讓人挺不舒服的,總有一種代碼有 bug 的錯覺。

精選14條 PyCharm 實用技巧

那麼如何關閉這個非語法級別的波浪線呢?很簡單,它的開關就在你的右下角那個像 人頭像 一樣的按鈕

精選14條 PyCharm 實用技巧

然後選擇 Syntax 級別的即可。同樣一段代碼,效果如下,乾淨了很多。

精選14條 PyCharm 實用技巧

11. 一鍵進行代碼性能分析

在 Python 中有許多模塊可以幫助你分析並找出你的項目中哪裡出現了性能問題。

比如,常用的模塊有 cProfile,在某些框架中,也內置了中間件幫助你進行性能分析,比如 Django ,WSGI。

做為Python 的第一 IDE, PyCharm 本身就支持了這項功能。而且使用非常方便,小白。

假設現在要分析如下這段代碼的性能損耗情況,找出到底哪個函數耗時最多

import time
def fun1():
time.sleep(1)
def fun2():
time.sleep(1)
def fun3():
time.sleep(2)
def fun4():
time.sleep(1)
def fun5():
time.sleep(1)
fun4()
fun1()
fun2()
fun3()
fun5()

點擊 Run -> Profile '程序' ,即可進行性能分析。

精選14條 PyCharm 實用技巧

運行完畢後,會自動跳出一個性能統計界面。

精選14條 PyCharm 實用技巧

性能統計界面由Name、Call Count、Time(ms)、Own Time(ms) ,4列組成一個表格,見下圖。

  1. 表頭Name顯示被調用的模塊或者函數;Call Count顯示被調用的次數;Time(ms)顯示運行時間和時間百分比,時間單位為毫秒(ms)。
  2. 點擊表頭上的小三角可以升序或降序排列表格。
  3. 在Name這一個列中雙擊某一行可以跳轉到對應的代碼。
  4. 以fun4這一行舉例:fun4被調用了一次,運行時間為1000ms,佔整個運行時間的16.7%

點擊 Call Graph(調用關係圖)界面直觀展示了各函數直接的調用關係、運行時間和時間百分比,見下圖。

精選14條 PyCharm 實用技巧

左上角的4個按鈕表示放大、縮小、真實大小、合適大小;

  1. 箭頭表示調用關係,由調用者指向被調用者;
  2. 矩形的左上角顯示模塊或者函數的名稱,右上角顯示被調用的次數;
  3. 矩形中間顯示運行時間和時間百分比;
  4. 矩形的顏色表示運行時間或者時間百分比大小的趨勢:紅色 > 黃綠色 > 綠色,由圖可以看出fun3的矩形為黃綠色,fun1為綠色,所有fun3運行時間比fun1長。
  5. 從圖中可以看出Test.py直接調用了fun3、fun1、fun2和fun5函數;fun5函數直接調用了fun4函數;fun1、fun2、fun3、fun4和fun5都直接調用了print以及sleep函數;整個測試代碼運行的總時間為6006ms,其中fun3的運行時間為1999ms,所佔的時間百分比為33.3%,也就是 1999ms / 6006ms = 33.3%。

12. 使用Git做版本控制

按照如下提示點擊 Git 倉庫配置

精選14條 PyCharm 實用技巧

接著輸入倉庫地址

精選14條 PyCharm 實用技巧

點擊 Test,測試連通性,會要求輸入密碼

精選14條 PyCharm 實用技巧

若一切順利,則會看到如下界面

精選14條 PyCharm 實用技巧

測試連接成功後,點擊 Clone 就可以克隆下來了。

對於以前使用 Git 命令來管理的,現在可以直接使用 PyCharm 的菜單欄來操作,這些功能已經可以滿足大多數人的日常需求了,應該是夠用了。

精選14條 PyCharm 實用技巧

13. Tab輕鬆轉空格

在團隊協作中,你難免會動到別人編輯的文件,有的人喜歡做tab做縮進,有的人喜歡用四個空格做縮進。(個人推薦使用tab轉四個空格)

但是在同一個Python文件模塊裡,tab 和 四個空格縮進兩種風格是不能共存的。這就需要你按照該文件原來的縮進風格來進行編碼,在 Pycharm 裡,可以設置自動檢測原文件的縮進風格來決定當你使用tab鍵縮進的時候,是TAB還是四個空格。

在圖示位置打勾即可開啟自動檢測。

精選14條 PyCharm 實用技巧

上面是對一箇舊的 Python 模塊進行修改時,如何決定當前編輯的縮進方式。

而對於新建模塊,默認的縮進方式,是如何確定的?

如下圖,若在 Use tab character 打上勾,則你新建一個 Python 後,就會使用 TAB 進行縮進,反之,則使用四個空格進行縮進。

精選14條 PyCharm 實用技巧

14. 源碼文檔,快速預覽

Ctrl + 鼠標左鍵 (Mac 上是:Command + 鼠標左鍵),可以實現函數跳轉查看源碼, 這幾乎是每一個 PyCharmer 都會的一個慣用技巧。

這裡再另外介紹兩個類似的小技巧,快速 查看函數文檔 和 預覽源代碼 。

在函數的開頭處,使用三個引號 " 包含的內容,叫做函數文檔 (DocString)。

在編寫代碼時,順便寫好函數的接口文檔,是一個很好的編碼習慣。它介紹了該函數的參數類型及說明,返回值類型及範例,寫得好一點的還會寫出 幾個簡單的 Example Usage 有助於理解使用。這邊隨便截一個 Werkzeug 的例子。

精選14條 PyCharm 實用技巧

假如我們在使用這個類的時候,忘記了這個用法,可以按住 Ctrl + q(Mac 的快捷鍵暫未找到),在當前頁面就可以快速預覽 LocalStack 的接口文檔。

精選14條 PyCharm 實用技巧

同樣的,如果你對這個類或者函數的代碼邏輯感興趣,也可以使用快速預覽的方式在當前頁面展示源代碼。快捷鍵是:Ctrl + shift + i (Mac:Command + shift + i)。效果如下

精選14條 PyCharm 實用技巧

如果 PyCharm 檢測到的同名函數有多個,可以點這裡進行切換選擇查看

精選14條 PyCharm 實用技巧

這兩個快捷鍵比起使用 Ctrl + 鼠標左鍵 跳進源代碼來說,更加方便,,就像微信小程序一樣,用完即焚,不會新產生一個標籤頁,也不需要來回跳轉頁面。



以上,便是今天的分享,希望大家喜歡。

最後,我自己是一名從事了多年開發的Python老程序員,辭職目前在做自己的Python私人定製課程,今年年初我花了一個月整理了一份最適合2019年學習的Python學習乾貨,可以送給每一位喜歡Python的小夥伴,想要獲取的可以關注我的頭條號並在後臺私信我:Python,即可免費獲取。


分享到:


相關文章: