最近和同學討論到spyder的使用技巧,所以就結合之前在網上看到網友的總結( https://blog.csdn.net/peiwang245/article/details/78528098)和自己的使用經歷做一下總結,以便自己日后和需要的朋友參考。
快速鎖定相同的代碼:
把鼠標放到想要鎖定字體的前面或者字體中間即可,電腦性能好的話反應很快,慢的話要2-3秒。
調試
先寫一個簡單的小程序用於調試:
1.我們暫時先不打斷點,用debug的方式運行該代碼試試
點擊spyder工具欄上的Debug按鈕,或者使用快捷鍵Ctrl+F5開始調試。
在ipython界面會輸出如圖所示的內容:
出現了ipdb提示符,說明我們已經進入了調試模式,上面輸出的內容可以看出是代碼的第一行,接着在提示符中輸入c(continue的縮寫,表示程序繼續向下執行到下一個斷點),會輸出如下內容:
程序執行結束,可見即使我們沒有打斷點,仍然會在第一句執行之前中斷(經測試,中斷的時候第一句還沒有執行),這個和我用過的其他編譯器不太一樣(比如eclipse和IntelliJ,在不打斷點的情況下會正常執行到底)。
如果你仔細看剛才的工具欄截圖的話,會發現在debug按鈕組的第五個按鈕和剛剛的’c’命令是一樣的功能,但是不知道為什么,在我這個版本的spyder里有這個按鈕一些bug(具體來說就是在程序執行結束之后不會自動退出pdb,而且之后再想使用’q’命令退出也退出不了,換而言之,就是卡死在了pdb里面),如果你使用的是更高版本的spyder的話,這個bug可能已經修復了,可以嘗試一下.
打斷點的兩種方法:
1.普通的breakpoint
用spyder打斷點的方法非常簡單,只要在想打斷點的那一行行首(若顯示行號,則在行號前)雙擊鼠標即可,如圖所示,我們嘗試建立一個斷點:
在每次開始debug之前,先在spyder的ipython界面中輸入%reset 把工作空間的所有變量清除,以免影響到我們接下來的測試.
按下Ctrl+F5開始debug,進行如圖所示的操作:
然后我們就到達了斷點處,從箭頭(–>)以及''D:/spyder_code/practicecode/spyder常用功能.py''中的數字9可以看出程序剛剛執行到了第9行(也就是我們打斷點的這一行),第9行到底有沒有執行呢?只要測試一下f變量是否存在就可以了,嘗試在ipdb中進行如下輸入:
!(python語句)的意思就是在當前狀態下執行該python語句,我剛剛的用法的意思顯然是查看變量內容,從!f 的錯誤信息可以看出f尚未定義,即第9行代碼(f='f')還沒有執行,查看e變量發現e變量已經被定義了,這說明第8行已經執行結束了。通過以上實驗可以看出,spyder會在斷點語句的執行之前中斷。
2.帶條件的breakpoint
雙擊剛剛在第9行代碼開頭創建的“小紅點”即可取消斷點。
取消斷點后,按住Ctrl+Shift,然后像剛才一樣雙擊第9行行首,會彈出一個小框:
在這個小框內可以輸入斷點的條件,可以是任意返回True或False的python語句,比如輸入: (a==4)and(b==5)
然后點擊OK按鈕,發現小紅點上多了一個問號,這個表示條件斷點(conditional breakpoint),開始debug試一下:點擊debug按鈕,如上所述,會在第一行語句執行之前中斷一次。然后在提示符中輸入c(continue的縮寫,表示程序繼續向下執行到下一個斷點),發現程序只在第一句中斷一下,斷點沒有起作用,因為在斷點的時候,a變量為’a’,b變量為’b’,不符合條件當然不會中斷.
現在重新開始debug,然后連續按三遍Ctrl+F10,然后發現程序執行到了第7行:
其實Ctrl+F10是單行執行的意思,每按一次執行一行,相當於點擊了工具欄上如下圖所示的按鈕:
這個時候我可以使用剛剛講過的!(python語句)來給a,b臨時指定一個值,在ipdb的提示符中輸入!a=4;b=5 ,然后使用c命令繼續執行,發現在條件斷點處中斷了,因為此時滿足了我們剛剛給條件斷點指定的條件:
如果忘了條件斷點的條件是什么的話,可按住Ctrl+Shift鍵雙擊“帶問號的小紅點”,然后就能看見條件是什么了,而且還可以修改條件,如果要取消斷點的話,直接雙擊就可以了。
總結一下剛剛所講的
Ctrl+F5 以Debug模式運行文件
在debug之前記得用%reset 指令清空一下ipython工作空間中的變量,以免影響debug中變量值的查看
無論你是否打斷點,都會在第一行語句執行之前中斷一次
!(python語句)可以在pdb提示符下執行python語句,可以用來查看變量值或者給變量臨時指定值
c命令或者Ctrl+F12可以讓程序執行到下一個斷點
q命令退出調試
Ctrl+F10 單行執行
雙擊行首設置斷點,按住Ctrl+Shift 雙擊行首可以設置條件斷點
上面的例子已經包括了大多數常用的功能,我下面要講的兩個功能只要看到按鈕的名稱就大概知道它是做什么的了. 如下:
Step Into
上面一張圖的按鈕的功能我們稱之為Step Into(下面一張圖的按鈕的功能我們稱之為return),用於進入一個函數體內部,為了更清楚的說明它的功能,我們給出一個例子,在spyder中創建如下程序:
# -*- coding: utf-8 -*-
"""
@author: zhu_Lydia
"""
def myTest():
c = 'a'
d = 'b'
e = 'c'
return c
a = 'a'
b = 'b'
c = myTest()
f = 'f'
print(a)
在spyder的ipython界面中輸入%reset,然后開始debug,不斷地按Ctrl+F10 單行執行這個程序,當運行到c = myTest() 這句時注意一下:
這就Step Into的主要功能.
Return
Return的功能與Step Into的功能剛好相反,當使用Step Into進入函數之后,按Ctrl+Shift+F11 后會直接跳到該函數的執行的最后一行,
此時再按一遍Ctrl+Shift+F11 或者Ctrl+F10 (單行執行)就可以跳出函數了。