這個(gè)系列的一些小技巧,對(duì)于一些重試用戶(hù)來(lái)說(shuō)可能是小 case,如果你覺(jué)得簡(jiǎn)單,直接略過(guò)即可,不是所有人都像你一樣,是個(gè)天才,在你之外,仍然有許多剛?cè)腴T(mén)的小伙伴。
創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比仁布網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式仁布網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋仁布地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴(lài)。
假如我們?cè)谝粋€(gè)爬蟲(chóng)的項(xiàng)目中,會(huì)使用到 正則表達(dá)式 來(lái)匹配我們想要抓取的內(nèi)容。正則這種東西,有幾個(gè)人能夠一步到位的呢,通常都需要經(jīng)過(guò)很多次的調(diào)試才能按預(yù)期匹配。在我們改了一次正則后,運(yùn)行了下,需要重新向網(wǎng)站抓取請(qǐng)求,才能發(fā)現(xiàn)沒(méi)有匹配上,然后又改了一版,再次運(yùn)行同樣需要發(fā)起請(qǐng)求,結(jié)果還是發(fā)現(xiàn)還是沒(méi)有匹配上,往往復(fù)復(fù),正則不好的同學(xué)可能要進(jìn)行幾十次的嘗試。
(上面這個(gè)例子可能不太貼切,畢竟是有很多種方法實(shí)現(xiàn)不用重新發(fā)請(qǐng)求,只是列舉了一種很笨拙且低效的調(diào)試過(guò)程,你看看就好了。)
而我們?cè)谶@幾十次的調(diào)試中,向同一網(wǎng)站發(fā)起請(qǐng)求都是沒(méi)有意義的重復(fù)工作。如果在 Pycharm 中可以像 IPython Shell 和 Jupyter Notebook 那樣,可以記住運(yùn)行后所有的變量信息,可以在不需要重新運(yùn)行項(xiàng)目或腳本,只需稍微調(diào)整下我們的代碼,直接就可以進(jìn)行正則調(diào)試。
答案當(dāng)然是有。
假如我在調(diào)試如下幾行簡(jiǎn)單的代碼。在第 3 行處打了個(gè)斷點(diǎn)。然后點(diǎn)擊圖示位置 Show Python Prompt
按鈕。
就進(jìn)入了 Python Shell
的界面,這個(gè)Shell 環(huán)境和我們當(dāng)前運(yùn)行的程序環(huán)境是打通的,使用的是同一個(gè) namespace,這下你可以輕松地進(jìn)行調(diào)試了。學(xué)習(xí)過(guò)程中有不懂的可以加入我們的學(xué)習(xí)交流秋秋圈784中間758后面214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開(kāi)發(fā)工具都有分享
上面我們打了個(gè)斷點(diǎn),是為了方便說(shuō)明這個(gè)效果。并不是說(shuō)一定要打斷點(diǎn)。如果不打斷點(diǎn),在腳本執(zhí)行完成后,也仍然可以在這個(gè)界面查看并操作所有變量。
現(xiàn)在我們已經(jīng)可以滿(mǎn)足我們的調(diào)試的需求,但是每次運(yùn)行腳本,都要手動(dòng)點(diǎn)擊Show Python Prompt
,有點(diǎn)麻煩。嗯?其實(shí)這個(gè)有地方可以設(shè)置默認(rèn)打開(kāi)的。這個(gè)開(kāi)頭還比較隱秘,一般人還真發(fā)現(xiàn)不了。
你需要點(diǎn)擊圖示位置 Edit Configurations
處。
然后在這里打勾選中。
設(shè)置上之后,之后你每次運(yùn)行后腳本后,都會(huì)默認(rèn)為你存儲(chǔ)所有變量的值,并為你打開(kāi) console 命令行調(diào)試界面。
除了上面這種方法,其實(shí)還有一種方法可以在調(diào)試過(guò)程中,執(zhí)行命令表達(dá)式,而這種大家可能比較熟悉了,這邊也提一下,就當(dāng)是匯總一下。但是從功能上來(lái)說(shuō),是沒(méi)有上面這種方法來(lái)得方便易用的。因?yàn)檫@種方法,必須要求你使用 debug 模式運(yùn)行項(xiàng)目,并打斷點(diǎn)。
使用方法就是,在你打了斷點(diǎn)后,在圖示位置處,點(diǎn)擊右鍵使用 Evaluate Expression
就彈出了一個(gè) Evaluate Expression
窗口,這里 可以運(yùn)行命令表達(dá)式,直接操作變量。
你在 Pycharm 運(yùn)行你的項(xiàng)目,通常是怎么執(zhí)行的?我的做法是,右鍵,然后點(diǎn)擊 Run
,或者使用快捷鍵 Shift + F10
。
有時(shí)候,在運(yùn)行/調(diào)試腳本的時(shí)候,我們需要指定一些參數(shù),這在命令行中,直接指定即可。
假設(shè)在命令行中,運(yùn)行腳本的命令是這樣
python main.py init --local
對(duì)于剛使用 Pycharm 的同學(xué),可能并不知道 Pycharm 也是可以指定參數(shù)的。點(diǎn)擊下圖位置
進(jìn)入設(shè)置面板,在 Script parameters
中填入?yún)?shù)即可。學(xué)習(xí)過(guò)程中有不懂的可以加入我們的學(xué)習(xí)交流秋秋圈784中間758后面214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開(kāi)發(fā)工具都有分享
同時(shí)在上圖的底部,你可以看到,這里可以很方便的切換 解釋器,比你跑到這邊來(lái)要容易得多吧
接下來(lái),介紹一個(gè),我看框架源碼的時(shí)的一個(gè)小技巧,可能只適用一小部分人吧。
我平時(shí)會(huì)看的框架是 OpenStack ,我不知道其他框架是怎樣的,但在 OpenStack 里面帶有大量(真的很多)的單元測(cè)試文件。這給我在使用Find in Path
時(shí)帶來(lái)了不小的困擾,你可以從下圖的搜索結(jié)果中感受一下,搜索一個(gè)函數(shù),test 文件里的結(jié)果比 正常文件要多很多。
這些測(cè)試文件的搜索結(jié)果,對(duì)于我們看源代碼不僅沒(méi)有任何幫助的,更重要的是還干擾視線(xiàn)。于是我就研究了一下,從文件名入手,只要在 File mask
里填寫(xiě) !test*
可以將這些test文件過(guò)濾掉。搜索結(jié)果一下子清晰很多。
先來(lái)說(shuō)下這個(gè)燈泡提示是什么,有什么用?
當(dāng)我們?cè)诖a里面有語(yǔ)法錯(cuò)誤,或者代碼編寫(xiě)不符合 pep8 代碼規(guī)范時(shí),鼠標(biāo)選擇有問(wèn)題的代碼,就會(huì)自動(dòng)彈出小燈泡,這個(gè)燈泡是有顏色之分的,如果是紅燈泡,一般都是語(yǔ)法問(wèn)題,如果不處理會(huì)影響代碼運(yùn)行。而如果是黃燈泡,就只是一個(gè)提示,提示你代碼不規(guī)范等,并不會(huì)影響程序的運(yùn)行。
雖然這個(gè)燈泡,是出于善意之舉,但我認(rèn)為它確實(shí)有點(diǎn)多余(可能是我個(gè)人沒(méi)有使用它的習(xí)慣),要是語(yǔ)法錯(cuò)誤會(huì)有紅色波浪線(xiàn)提示。你可能會(huì)說(shuō)燈泡不僅起到提示的作用,它還可以自動(dòng)糾正代碼,我個(gè)人感覺(jué)并沒(méi)有人工校正來(lái)得效率,來(lái)得精準(zhǔn)。
基于有時(shí)還會(huì)像知乎上這個(gè)朋友說(shuō)的這樣,會(huì)擋住我們的代碼,會(huì)經(jīng)常誤點(diǎn),這確實(shí)也是一個(gè)煩惱。
我研究了下,Pycharm (2018版本)里是有開(kāi)關(guān)按鈕的,將下圖中的這個(gè)選項(xiàng)(Show intention bulb
)取消勾選,就可以關(guān)閉這個(gè)功能。
下面我先給出了一小段代碼示例,思考一下,為什么name,my_name 不會(huì)有波浪線(xiàn),而 myname 和 wangbm 會(huì)有波浪線(xiàn)呢?
Pycharm 本身會(huì)實(shí)時(shí)地對(duì)變量名進(jìn)行檢查,如果變量名不是一個(gè)已存在的英文單詞,就會(huì)出現(xiàn)一條波浪線(xiàn),當(dāng)一個(gè)變量里有多個(gè)單詞時(shí),Python 推薦的寫(xiě)法是用下劃線(xiàn)來(lái)分隔(其他語(yǔ)言可能會(huì)習(xí)慣使用駝峰式命名法
,但 Python 是使用下劃線(xiàn)),所以在 Pycharm 看來(lái) my_name 是規(guī)范的,而 myname 會(huì)被當(dāng)成是一個(gè)單詞對(duì)待,由于它在單詞庫(kù)里并沒(méi)有它,所以 myname 是不規(guī)范的。學(xué)習(xí)過(guò)程中有不懂的可以加入我們的學(xué)習(xí)交流秋秋圈784中間758后面214,與你分享Python企業(yè)當(dāng)下人才需求及怎么從零基礎(chǔ)學(xué)習(xí)Python,和學(xué)習(xí)什么內(nèi)容。相關(guān)學(xué)習(xí)視頻資料、開(kāi)發(fā)工具都有分享
每個(gè)人的變量命名習(xí)慣不一樣,如何你在項(xiàng)目里大量使用了 myname 這種風(fēng)格的變量命名方法,像下面這樣(隨便找了一段 cloudinit 的代碼),是讓人挺不舒服的,總有一種代碼有 bug 的錯(cuò)覺(jué)。
那么如何關(guān)閉這個(gè)非語(yǔ)法級(jí)別的波浪線(xiàn)呢?很簡(jiǎn)單,它的開(kāi)關(guān)就在你的右下角那個(gè)像 人頭像 一樣的按鈕
然后選擇 Syntax
級(jí)別的即可。同樣一段代碼,效果如下,干凈了很多。