Pycharm學(xué)習(xí)教程(2) 代碼風(fēng)格
如何創(chuàng)建一個(gè)Python工程并使其具有Pycharm的代碼風(fēng)格,具體如下
1、主題
這部分教程主要介紹如何創(chuàng)建一個(gè)Python工程并使其具有Pycharm的代碼風(fēng)格。你將會(huì)看到Pycharm使你的源碼變得非常簡(jiǎn)潔美觀,帶有合適的縮進(jìn)、空格等等,因此Pycharm也是一款代碼質(zhì)量管理的利器。
這部分教程并不會(huì)介紹如何使用Python進(jìn)行編程,更多有關(guān)Python編程的知識(shí)請(qǐng)參照:Python編程
2、準(zhǔn)備工作
在開(kāi)始之前,請(qǐng)確認(rèn)一下情況:
?。?)安裝了Pycharm2.7或更高版本的軟件
?。?)已經(jīng)新建了一個(gè)Python工程(File→New Project),詳情參照:Pycharm新建工程文件
?。?)已經(jīng)在工程下添加了兩個(gè)目錄:src和test_dir(File→New or Alt+Insert),詳情參照:Pycharm新建工程文件
?。?)已經(jīng)向工程目錄下添加了對(duì)應(yīng)的Python文件(File→New or Alt+Insert),詳情參照:Pycharm新建工程文件
3、代碼報(bào)錯(cuò)的高亮模式
打開(kāi)一個(gè)新建的Python文件進(jìn)行編輯(F4),這個(gè)文件中默認(rèn)有兩行代碼:作者姓名和工程名稱。之所以會(huì)出現(xiàn)這兩行代碼,是因?yàn)镻ython文件在創(chuàng)建時(shí)是基于文件模板進(jìn)行創(chuàng)建的,因此會(huì)預(yù)定義這兩個(gè)變量。
接下來(lái)輸入關(guān)鍵字class,當(dāng)你開(kāi)始輸入時(shí),Pycharm的拼寫(xiě)提示機(jī)制會(huì)立即列出候選項(xiàng)來(lái)幫助你完成代碼:
?。▍⒄?a rel="nofollow" target="_blank" >Pycharm拼寫(xiě)提示來(lái)了解Pycharm更多關(guān)于拼寫(xiě)提示的信息)
這個(gè)紅色波浪線標(biāo)記了下次代碼輸入的期望位置,在這種情況下,它是一個(gè)預(yù)輸入定義符。鍵入類名Solver,紅色波浪線將會(huì)移動(dòng)到類名之后。如果你將術(shù)鼠標(biāo)指針懸停在波浪線上,將會(huì)看到所提示的錯(cuò)誤信息("Colon expected"),當(dāng)然,此時(shí)位于右側(cè)滾動(dòng)欄的紅色標(biāo)志也會(huì)給出相同的錯(cuò)誤信息。
OK,輸入冒號(hào),回車。根據(jù)Python代碼風(fēng)格標(biāo)準(zhǔn),需要定義下一個(gè)類聲明,當(dāng)然此時(shí)我們可以通過(guò)輸入空格來(lái)取消它。
4、聚焦PEP8代碼風(fēng)格檢查
然而,在默認(rèn)情況下這些警告提醒是不可見(jiàn)的,所以首先需要做的就是提升它們的優(yōu)先級(jí)以進(jìn)行顯示。單擊設(shè)置按鈕,然后在Settings/Preferences對(duì)話框中的 Inspections 頁(yè)面,鍵入PEP8來(lái)找到所有相關(guān)選項(xiàng),在對(duì)應(yīng)的下拉菜單中選中warning選項(xiàng):
單擊應(yīng)用,關(guān)閉對(duì)話框,返回源碼編輯界面。
5、詳解PEP8代碼風(fēng)格
現(xiàn)在Ptcharm已經(jīng)能夠正常顯示它的代碼規(guī)范,確保你編寫(xiě)的代碼格式的完整性。接下來(lái)當(dāng)我們輸入下一條語(yǔ)句(例如def demo(self,a,b,c):),Pycharm將根據(jù)PEP8的代碼規(guī)范機(jī)制來(lái)報(bào)告當(dāng)前存在的格式問(wèn)題。
正如你所見(jiàn)到的那樣,Pycharm將其所支持的PEP8規(guī)范設(shè)置為默認(rèn)的正規(guī)Python代碼格式標(biāo)準(zhǔn)。如果你打開(kāi)inspections的列表,(Ctrl+Alt+S→Inspections),可以看到Pycharm在你的代碼中加載了pep8.py工具,用來(lái)精確定位你的代碼風(fēng)格問(wèn)題。
6、代碼檢查以及相關(guān)設(shè)置
順便說(shuō)一下,如果你仔細(xì)觀察 Inspections page頁(yè)面中 inspection profile的缺省設(shè)置(如果你是第一次進(jìn)行設(shè)置的話)會(huì)發(fā)現(xiàn),Pycharm已經(jīng)將所有的代碼規(guī)則用于當(dāng)前的工程中了。
接下來(lái)我們對(duì)代碼檢查機(jī)制做兩方面的改動(dòng):
?。?)在測(cè)試腳本中,將拼寫(xiě)錯(cuò)誤標(biāo)記為綠色
?。?)在說(shuō)明文檔(注釋)中,將拼寫(xiě)錯(cuò)誤改為紅色提示
接下來(lái)我們一一進(jìn)行介紹
7、創(chuàng)建一個(gè)作用域
首先我們需要?jiǎng)?chuàng)建兩個(gè)作用域用來(lái)進(jìn)行兩個(gè)不同應(yīng)用范圍的設(shè)置。單擊設(shè)置按鈕進(jìn)入 Settings/Preferences對(duì)話框,打開(kāi)Scopes頁(yè)面,單擊上方綠色的加號(hào)來(lái)創(chuàng)建一個(gè)局部類型的作用域:
在Add New Scope對(duì)話框中,鍵入作用域名稱,然后在工程管理器(樹(shù)型結(jié)構(gòu))中選擇需要包含到當(dāng)前作用域中的目錄:test_dir,注意此時(shí)的Pattern欄已經(jīng)自動(dòng)顯示加載路徑:
重復(fù)上述步驟再新建一個(gè)Production作用域。
8、在新建的作用域中創(chuàng)建代碼檢查控制文件
接下來(lái),創(chuàng)建一份缺省代碼控制文件的拷貝文件(處于安全考慮):
然后在對(duì)它進(jìn)行命名,例如我們這里命名為MyProjectProfile。這個(gè)新的配置文件是之前默認(rèn)缺省配置文件的復(fù)制版,兩者的設(shè)置內(nèi)容完全相同。
接下來(lái)選中我們拷貝的代碼控制文件,定位到Spelling項(xiàng)進(jìn)行相應(yīng)改動(dòng)。為了快速找到Spelling選項(xiàng)葉,只需在搜索欄中輸入Spel即可。
然后通過(guò)單擊綠色的加號(hào)來(lái)添加我們之前新建的Test作用域,然后再次單擊添加Production作用域:
在Test作用域中,代碼檢查的嚴(yán)格等級(jí)如圖中左側(cè)所示,Production作用域中有類似設(shè)置,不過(guò)所選擇的下拉列表中的安全等級(jí)不同:
留意對(duì)話框中作用域名稱的字體顏色,如果為灰色則說(shuō)明未做改動(dòng),若是藍(lán)色則說(shuō)明已經(jīng)更改了相關(guān)設(shè)置。
應(yīng)用更改設(shè)置然后關(guān)閉對(duì)話框。
此時(shí),按照要求修改后的配置文件已經(jīng)完成,名為MyProjectProfile,其在Test作用域和Production作用域中有不同的拼寫(xiě)檢查設(shè)置。接下來(lái)我們將這個(gè)配置應(yīng)用于對(duì)應(yīng)代碼區(qū)域,在主程序菜單中選擇Code→Inspect Code,在對(duì)話框中指定已經(jīng)定義好的作用域和配置文件:
當(dāng)然我們需要操作兩次,因?yàn)橛袃蓚€(gè)定義域需要進(jìn)行相關(guān)配置的更改,并且可以將相關(guān)的配置清單導(dǎo)出。
比較一下這兩個(gè)作用域的拼寫(xiě)檢查結(jié)果:
正如你所見(jiàn),在Production作用域?yàn)榧t色波浪線,在Test作用域?yàn)榫G色波浪線。
9、錯(cuò)誤提示的高亮代碼顯示
除此之外,Pycharm還會(huì)根據(jù)配置文件控制,對(duì)當(dāng)前的一些錯(cuò)誤進(jìn)行高亮顯示處理。
舉個(gè)例子,如果你的拼寫(xiě)檢查配置文件中包含"Unresolved references"這條檢查規(guī)則,同時(shí)你又使用了一條尚未進(jìn)行import的符號(hào),Pycharm就會(huì)用下劃線標(biāo)出無(wú)法解釋的符號(hào)來(lái)提示你導(dǎo)入相關(guān)模塊:
參考auto-import tutorial來(lái)完成相關(guān)模塊的導(dǎo)入工作
10、快速成型以及多次提示
你是否已經(jīng)注意到在代碼左端經(jīng)常出現(xiàn)一個(gè)亮起的黃色或者紅色的燈泡然而你卻并不希望看到它?
11、源碼自動(dòng)生成
Pycharm提供了很多代碼自動(dòng)生成機(jī)制,你可以參照product documentation中有關(guān)自動(dòng)生成代碼的介紹:Auto-generating code,接下來(lái)我們探討一下Pycharm的主代碼生成機(jī)制。當(dāng)然我們需要先將 Solver.py中已有的內(nèi)容刪除,重新開(kāi)始。
首先,創(chuàng)建一個(gè)類實(shí)例:
OK,Pycharm成功創(chuàng)建出了一個(gè)類:
接下來(lái)我們向類中添加一個(gè)成員方法,為了達(dá)到這個(gè)目的,首先需要在類實(shí)例后面輸入一個(gè)點(diǎn)號(hào),然后鍵入成員函數(shù)名稱。此時(shí)這個(gè)成員函數(shù)是未定義的,因此Pycharm會(huì)提示我們來(lái)創(chuàng)建一個(gè):
然后在函數(shù)體中手動(dòng)輸入源碼,例如我們輸入一段計(jì)算二次方程判別式的程序,其中有一個(gè)函數(shù)sqrt()來(lái)自math模塊,但目前尚未被包含,我們繼續(xù)輸入,看Pycharm如何解決這個(gè)問(wèn)題:
因此,我們?cè)创a最終如下:
然而,代碼缺少一些重要的邏輯分析。我們需要分析判別式結(jié)果d,如果它是零或者正數(shù),則正常求解方程的根;如果其為負(fù)數(shù),我們需要拋出一個(gè)異常,Pycharm會(huì)如何幫助我們完成這個(gè)任務(wù)?
讓我們用if語(yǔ)句來(lái)包含一塊代碼,即選中當(dāng)d為非負(fù)數(shù)時(shí)需要執(zhí)行的語(yǔ)句:
然后按下Ctrl+Alt+T,或者單擊主菜單中的Code→Surround With選項(xiàng),Pycharm將會(huì)彈出一個(gè)下拉菜單,顯示當(dāng)前情況下可用的范圍控制結(jié)構(gòu):
選擇if選項(xiàng),Pycharm會(huì)自動(dòng)添加if True:語(yǔ)句到選中的行:
這里我們并不對(duì)布爾表達(dá)式做過(guò)多解釋,根據(jù)需要我們直接將True替換成d >= 0,接下里將光標(biāo)定位到最后一行,回車,光標(biāo)將會(huì)出現(xiàn)在下一行,和if保持相同的縮進(jìn),輸入else:,然后觀察Pycharm給出的預(yù)輸入提示:
再次回車,移動(dòng)光標(biāo),這里我們?cè)赑ycharm強(qiáng)大的拼寫(xiě)提示下輸入拋出異常的代碼:
12、代碼格式修改
再次觀察Solver.py文件會(huì)發(fā)現(xiàn),右邊滾動(dòng)槽中顯示了很多黃色標(biāo)記,將鼠標(biāo)懸停在上邊,Pycharm將會(huì)顯示對(duì)應(yīng)的代碼格式問(wèn)題:
好在這些信息都是警告信息,并不會(huì)影響到代碼的運(yùn)行結(jié)果,但是格式問(wèn)題實(shí)在是太多了,那么如何把代碼格式調(diào)整得更為美觀規(guī)范呢?
這里所用到的就是code reformatting了,不妨嘗試一下。
為了調(diào)用格式化操作,只需按下Ctrl+Alt+L快捷鍵,或者在主菜單中單擊Code→Reformat Code,此時(shí)我們驚奇發(fā)現(xiàn)所有的PEP8類格式問(wèn)題都已經(jīng)消除。
當(dāng)然我們可以自定義格式化標(biāo)準(zhǔn),打開(kāi) code style settings對(duì)話框,選擇指定語(yǔ)言(Python),進(jìn)行必要的更改即可:
13、添加注釋文檔
代碼格式調(diào)整完之后,左側(cè)仍然留有一些黃色的標(biāo)志位,鼠標(biāo)懸停后提示類似于"Missing docstring"的警告信息,代碼前方亮著的小黃燈泡也提示同樣的信息:
解決方法也很簡(jiǎn)單,在彈出的下拉菜單中選擇Insert docstring,Pycharm就會(huì)自動(dòng)添加一段帶格式的文本作為注釋文檔:
注意這里有若干中注釋文檔的格式,你可以在Python Integrated Tools頁(yè)面中設(shè)置當(dāng)前需要插入哪種格式的注釋文檔,例如Epytext、plain text等
14、輸入注釋
注釋文檔用以解釋函數(shù)的參數(shù)、返回值、變量的類型及含義。舉個(gè)例子,我們需要控制demo()的輸入?yún)?shù)類型,我們就需要在注釋文檔中添加相應(yīng)的注釋信息:
至此,主函數(shù)的注釋文檔完成。
接下來(lái)在函數(shù)調(diào)用的過(guò)程中,若出現(xiàn)參數(shù)類型不匹配的情況,Pycharm會(huì)依據(jù)注釋文檔來(lái)給出響應(yīng)的錯(cuò)誤提示信息:
更多有關(guān)Pycharm注釋文檔的信息參見(jiàn): type hinting。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 快速設(shè)置IDEA代碼風(fēng)格為Google風(fēng)格
- eslint+prettier統(tǒng)一代碼風(fēng)格的實(shí)現(xiàn)方法
- 配置eslint規(guī)范項(xiàng)目代碼風(fēng)格
- 實(shí)例詳解Vue項(xiàng)目使用eslint + prettier規(guī)范代碼風(fēng)格
- 如何使用 Pylint 來(lái)規(guī)范 Python 代碼風(fēng)格(來(lái)自IBM)
- php好代碼風(fēng)格的階段性總結(jié)
- .Net 項(xiàng)目代碼風(fēng)格要求小結(jié)
- 當(dāng)前流行的JavaScript代碼風(fēng)格指南
- 你應(yīng)該知道的Ruby代碼風(fēng)格
- 關(guān)于更改Zend Studio/Eclipse代碼風(fēng)格主題的介紹
- JQuery入門—JQuery程序的代碼風(fēng)格詳細(xì)介紹
- Java黑科技之通過(guò)Google Java Style 文件配置IDEA和Ecplise代碼風(fēng)格
相關(guān)文章
Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)定時(shí)自動(dòng)關(guān)閉的tkinter窗口方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭
這篇文章主要介紹了如何快速一鍵生成Python爬蟲(chóng)請(qǐng)求頭,幫助大家更好的理解和學(xué)習(xí)使用python爬蟲(chóng),感興趣的朋友可以了解下2021-03-03python中import cv2遇到的錯(cuò)誤及安裝方式
這篇文章主要介紹了python中import cv2遇到的錯(cuò)誤及安裝方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python把對(duì)應(yīng)格式的csv文件轉(zhuǎn)換成字典類型存儲(chǔ)腳本的方法
今天小編就為大家分享一篇Python把對(duì)應(yīng)格式的csv文件轉(zhuǎn)換成字典類型存儲(chǔ)腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Python3.4學(xué)習(xí)筆記之常用操作符,條件分支和循環(huán)用法示例
這篇文章主要介紹了Python3.4常用操作符,條件分支和循環(huán)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python3.4常見(jiàn)的數(shù)學(xué)運(yùn)算、邏輯運(yùn)算操作符,條件分支語(yǔ)句,循環(huán)語(yǔ)句等功能與基本用法,需要的朋友可以參考下2019-03-03詳解Python中四種關(guān)系圖數(shù)據(jù)可視化的效果對(duì)比
python關(guān)系圖的可視化主要就是用來(lái)分析一堆數(shù)據(jù)中,每一條數(shù)據(jù)的節(jié)點(diǎn)之間的連接關(guān)系從而更好的分析出人物或其他場(chǎng)景中存在的關(guān)聯(lián)關(guān)系。本文將制作四個(gè)不同的關(guān)系圖的可視化效果,感興趣的可以了解一下2022-11-11Python多進(jìn)程并發(fā)與同步機(jī)制超詳細(xì)講解
進(jìn)程(Process),顧名思義,就是進(jìn)行中的程序。有一句話說(shuō)得好:程序是一個(gè)沒(méi)有生命的實(shí)體,只有處理器賦予程序生命時(shí),它才能成為一個(gè)活動(dòng)的實(shí)體。進(jìn)程是資源分配的最小單元,也就是說(shuō)每個(gè)進(jìn)程都有其單獨(dú)的內(nèi)存空間2022-12-12python+matplotlib繪制旋轉(zhuǎn)橢圓實(shí)例代碼
這篇文章主要介紹了python+matplotlib繪制旋轉(zhuǎn)橢圓實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python用于學(xué)習(xí)重要算法的模塊pygorithm實(shí)例淺析
這篇文章主要介紹了Python用于學(xué)習(xí)重要算法的模塊pygorithm,結(jié)合實(shí)例形式簡(jiǎn)單分析了pygorithm模塊的功能、算法調(diào)用、源碼獲取、時(shí)間復(fù)雜度計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2018-08-08