3 編輯代碼
Visual Studio Code提供了許多適用于所有編程語(yǔ)言的標(biāo)準(zhǔn)編輯功能。
- 快速修復(fù)
- 代碼補(bǔ)全
- 定義
- 聲明
- 格式化
- 語(yǔ)法
- 重構(gòu)
- 代碼片段
這些內(nèi)置的編輯功能減少了編輯代碼所需的手動(dòng)任務(wù)和鍵入次數(shù),從而節(jié)省了時(shí)間。
Python擴(kuò)展擴(kuò)展了代碼編輯功能。有了Python擴(kuò)展,導(dǎo)入庫(kù)只需極少的工作量,因?yàn)樵摂U(kuò)展可以建議將已安裝的軟件包導(dǎo)入程序。更常見(jiàn)的是,只需輸入幾個(gè)字符,編輯器就能自動(dòng)完成代碼行,提供定義,甚至定位聲明。
無(wú)論你喜歡autopep8、Black還是YAPF,你都可以設(shè)置所需的格式器并自定義設(shè)置,以確保源代碼的格式符合你的喜好。運(yùn)行Python代碼時(shí),linting會(huì)分析代碼的運(yùn)行情況,并在"問(wèn)題"面板中輸出錯(cuò)誤。如果你發(fā)現(xiàn)需要重構(gòu) Python程序,可以使用提取變量、方法和分類導(dǎo)入的命令。此外,你還可以使用代碼片段來(lái)節(jié)省時(shí)間,避免手動(dòng)輸入重復(fù)的代碼模式。
本章將在一個(gè)名為circle_area.py的腳本中探討每種編輯功能,該腳本使用數(shù)學(xué)模塊計(jì)算圓的面積。在嘗試本章的示例之前,請(qǐng)?jiān)诤线m的項(xiàng)目文件夾中新建一個(gè)名為circle_area.py的Python文件。
3.1 快速修復(fù)
快速修復(fù)有助于解決由警告或錯(cuò)誤發(fā)現(xiàn)的問(wèn)題。如果有潛在的解決方案,Visual Studio Code會(huì)在源代碼下顯示一條藍(lán)色斜線,并在編輯器左側(cè)空白處顯示一個(gè)燈泡圖標(biāo)。點(diǎn)擊燈泡會(huì)顯示快速修復(fù)選項(xiàng)或執(zhí)行操作。
除了Visual Studio Code默認(rèn)提供的快速修復(fù)功能外,從市場(chǎng)安裝的擴(kuò)展也可能包含自己的快速修復(fù)功能。例如,Python擴(kuò)展有添加導(dǎo)入的快速修復(fù)功能,可以快速完成導(dǎo)入語(yǔ)句。當(dāng)你開(kāi)始在編輯器中鍵入軟件包名稱時(shí),你會(huì)發(fā)現(xiàn)出現(xiàn)了快速修復(fù)工具來(lái)自動(dòng)完成導(dǎo)入語(yǔ)句。選擇燈泡圖標(biāo)會(huì)顯示導(dǎo)入建議列表。首先列出的是包的導(dǎo)入語(yǔ)句,其次是指定包中其他模塊和/或成員(類、對(duì)象等)的語(yǔ)句。
此功能需要使用Microsoft Python語(yǔ)言服務(wù)器。要啟用語(yǔ)言服務(wù)器,請(qǐng)?jiān)趕ettings.json文件中設(shè)置"python.jediEnabled":false。
添加導(dǎo)入快速修復(fù)要求環(huán)境中已安裝要導(dǎo)入的模塊。
試用:在編輯器中輸入 math,調(diào)用添加導(dǎo)入快速修復(fù)。選擇代碼動(dòng)作(如燈泡)。Visual Studio Code 建議將 import math。選擇將導(dǎo)入語(yǔ)句添加到代碼中。
add imports Code Action 還能識(shí)別下列Python包的其他常用縮寫(xiě): NumPy縮寫(xiě)為np,TensorFlow縮寫(xiě)為 tf,pandas縮寫(xiě)為 pd,matplotlib.pyplot縮寫(xiě)為 plt,matplotlib 縮寫(xiě)為mpl,SciPi縮寫(xiě)為 spio,SciPy 縮寫(xiě)為sp。
3.2 代碼自動(dòng)完成、定義和聲明
智能提示(IntelliSense)是微軟用來(lái)識(shí)別各種有用的編程輔助工具的名稱,如代碼自動(dòng)完成、對(duì)象定義以及對(duì)象或變量聲明的位置。按下 Ctrl+spacebar 或鍵入觸發(fā)字符(如 Python 中的點(diǎn)字符)即可觸發(fā)此類功能。
當(dāng)你鍵入時(shí),Python擴(kuò)展會(huì)根據(jù)Python語(yǔ)義和對(duì)源代碼的分析提供智能代碼補(bǔ)全。如果已知可能的補(bǔ)全,Visual Studio Code 會(huì)提供建議。
試試看:在circle_area.py,使用代碼補(bǔ)全查看建議的Python方法。
在新的一行中,創(chuàng)建變量radius。該變量用于輸入計(jì)算中使用的半徑。
請(qǐng)注意,Visual Studio Code會(huì)在您鍵入的同時(shí)推薦一些方法。使用箭頭鍵和Tab鍵選擇float方法。
新建一行,創(chuàng)建area = variable。該變量包含計(jì)算圓面積的方程請(qǐng)求(A = π r2)。
方程中需要的π值可以在數(shù)學(xué)庫(kù)中找到,即math.π。在區(qū)域=之后,開(kāi)始鍵入m,注意VS代碼提供了數(shù)學(xué)模塊中的常量和函數(shù)列表。
使用箭頭鍵滾動(dòng)列表以找到pi。找到后,單擊向右箭頭查看對(duì)象類型。查看對(duì)象類型后,選擇pi。
繼續(xù)計(jì)算r2的面積方程。在編輯器中輸入m.p,然后使用箭頭鍵查找pow函數(shù)。找到后,選擇函數(shù)。
添加一對(duì)括號(hào)后,編輯器將為函數(shù)的使用提供進(jìn)一步指導(dǎo)。鍵入(為 pow函數(shù)添加一對(duì)小括號(hào),以查看 Visual Studio 代碼提供的進(jìn)一步指導(dǎo)。
完成變量賦值,在打印區(qū)域添加打印語(yǔ)句并運(yùn)行代碼。
import math as m
radius = float(input('Radius: '))
area = ma.pi * (m.pow(radius, 2))
print(area
隨著Python程序變得越來(lái)越復(fù)雜,跟蹤源代碼中聲明對(duì)象或變量的位置就成了一項(xiàng)挑戰(zhàn)。聲明可以幫助您找到對(duì)象或變量的聲明位置:只需將編輯光標(biāo)放在對(duì)象或變量上,Visual Studio Code就會(huì)高亮顯示對(duì)該對(duì)象或變量的所有引用,直至其聲明。
3.3 格式化
格式化器可自動(dòng)為代碼格式化提供一致的風(fēng)格,從而使開(kāi)發(fā)人員將更多時(shí)間用于編寫(xiě)代碼,而不必?fù)?dān)心遵循風(fēng)格指南的細(xì)枝末節(jié)。對(duì)于合作項(xiàng)目而言,格式化器還能減少因貢獻(xiàn)者使用相同格式化器而產(chǎn)生的合并沖突,從而提供相似的風(fēng)格。請(qǐng)看下面 for 循環(huán)的代碼塊,它從列表 numbers 中獲取一個(gè)數(shù)字,然后乘以 2 :
numbers = [2, 4, 6, 8]
for num in numbers :
num = num * 2
print (num)
注意間距使用不當(dāng)。在這種情況下,可以使用格式化器按照定義的樣式指南自動(dòng)格式化代碼。例如autopep8 格式化器會(huì)將代碼格式化如下:
numbers = [2, 4, 6, 8]
for num in numbers:
num = num * 2
print(num)
隨著程序越來(lái)越長(zhǎng),格式化器提供的格式自動(dòng)化對(duì)開(kāi)發(fā)人員的工作流程變得非常寶貴。
Visual Studio Code 的 Python 擴(kuò)展支持以下格式器:
- autopep8(默認(rèn))
按照PEP8樣式指南格式化Python代碼。autopep8利用了linting工具pycodestyle來(lái)確定代碼的哪些部分需要格式化,并嘗試修復(fù)。
- Black
側(cè)重于一致性,不可配置。與其他Python格式化工具相比,Black 提供的命令行選項(xiàng)很少。
- YAPF
可配置,只專注于格式化代碼。YAPF獲取代碼并將其重新格式化為符合樣式指南的最佳格式,即使原始代碼并未違反樣式指南。YAPF不會(huì)修復(fù)語(yǔ)法錯(cuò)誤。
選擇一種格式化器還是另一種格式化器取決于個(gè)人喜好。如果你更愿意遵循PEP8樣式指南,同時(shí)又能修復(fù)線程發(fā)現(xiàn)的問(wèn)題,那么autopep8將是最適合你的格式化器。如果你更愿意配置一個(gè)格式化器來(lái)遵循你偏好的樣式指南,按照樣式指南來(lái)格式化你的代碼,同時(shí)避免修復(fù)線程問(wèn)題,那么YAPF將是你推薦的格式化器。但是,如果一致性是你的首要考慮因素,或者你使用的是相對(duì)較舊的代碼庫(kù),缺乏格式化但需要一致的格式,那么最好使用Black。
要在Visual Studio Code中指定格式化器,首先必須安裝格式化器,然后在Python擴(kuò)展的設(shè)置中將其選為格式化提供程序。有關(guān)安裝命令,請(qǐng)參閱以下列表:
autopep8- pip install pep8
Black- pip install black
YAPF- pip install yapf
選擇格式化器時(shí),Python擴(kuò)展會(huì)在當(dāng)前pythonPath中查找格式化器。如果格式化器安裝在其他位置,可以在格式化器的自定義路徑設(shè)置中指定位置。格式器的其他設(shè)置可在設(shè)置編輯器和 settings.json 文件中進(jìn)行管理。要使用格式器,請(qǐng)使用以下鍵盤(pán)快捷鍵:
Mac: Shift+Option+F
Windows: Shift+Alt+F
Linux: Shift+Ctrl+I
3.3.1 在設(shè)置編輯器中編輯格式化設(shè)置
在設(shè)置編輯器中,從 Python?格式化的下拉列表中選擇格式化: 提供程序設(shè)置的下拉列表中選擇格式化器。
自定義參數(shù)可通過(guò)單擊相應(yīng)格式器的"添加項(xiàng)"按鈕添加。必須為參數(shù)輸入字符串值。
如果格式化器沒(méi)有安裝在當(dāng)前的pythonPath中,請(qǐng)?jiān)诟鞲袷交鞯淖远x路徑設(shè)置中指定格式化器位置的完整路徑。提供了YAPF格式化器的自定義路徑。
3.3.2 編輯settings.json中的格式化設(shè)置
在settings.json文件中,可通過(guò)添加python.formatting.provider條目來(lái)指定格式器。支持的值有autopep8、black 和 yapf。下面是將 YAPF 設(shè)置為格式化器的示例條目:
"python.formatting.provider": "yapf"
自定義參數(shù)也可以添加到條目中。有關(guān)每個(gè)格式器的自定義參數(shù)設(shè)置,請(qǐng)參閱以下列表:
- autopep8- python.formatting.autopep8Args
- Black- python.formatting.blackArgs
- YAPF- python.formatting.yapfArgs
對(duì)于自定義參數(shù),命令行中用空格分隔的參數(shù)字符串的每個(gè)頂層元素必須是args列表中的一個(gè)單獨(dú)項(xiàng)目。此處提供了YAPF的示例條目:
"python.formatting.yapfArgs": ["--style", "{based_on_style: google, spaces_before_comment: 4}"]
如果當(dāng)前pythonPath中未安裝格式化器,請(qǐng)?zhí)砑訔l目,使用完整路徑指定相應(yīng)格式化器的位置。有關(guān)各格式器的自定義路徑設(shè)置,請(qǐng)參閱以下列表:
autopep8- python.formatting.autopep8Path
Black- python.formatting.blackPath
YAPF- python.formatting.yapfPath
以下是 YAPF 的示例條目:
"python.formatting.yapfPath": "c:/yapfPath/yapf.exe"
參考資料
- 軟件測(cè)試精品書(shū)籍文檔下載持續(xù)更新 https://github.com/china-testing/python-testing-examples 請(qǐng)點(diǎn)贊,謝謝!
- 本文涉及的python測(cè)試開(kāi)發(fā)庫(kù) 謝謝點(diǎn)贊! https://github.com/china-testing/python_cn_resouce
- python精品書(shū)籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品書(shū)籍下載 https://www.cnblogs.com/testing-/p/17438558.html
3.4 Linting
正如我們所預(yù)料的那樣,要想在運(yùn)行代碼前始終輸入無(wú)誤的代碼或捕捉到所有可能的錯(cuò)誤幾乎是不可能的。Linting可以分析代碼的運(yùn)行方式,并在輸入時(shí)檢測(cè)潛在的錯(cuò)誤。下面是函數(shù)fullname的代碼塊,它返回函數(shù)調(diào)用中傳遞的參數(shù)的連接值:
def fullname(fname, lname):
return fname + " " + lname
print(name("April", "Speight"))
打印語(yǔ)句中的函數(shù)調(diào)用使用了錯(cuò)誤的函數(shù)調(diào)用名稱。
有多種可啟用的linter可供使用。不過(guò),如果你選擇在不使用linter的情況下編寫(xiě)代碼,并不要求啟用linter。如果啟用了襯著器,每當(dāng)保存文件時(shí),襯著器就會(huì)自動(dòng)運(yùn)行。您也可以在任何時(shí)候使用Python.Run Linting 命令手動(dòng)調(diào)用linter。
3.4.1 啟用和禁用著色
Visual Studio Code 的 Python 擴(kuò)展支持以下linter:
- Pylint(默認(rèn))- 檢查錯(cuò)誤并嘗試執(zhí)行編碼標(biāo)準(zhǔn)
- Flake8-根據(jù)PEP8中的風(fēng)格約定、編程錯(cuò)誤和循環(huán)復(fù)雜性檢查代碼
- mypy-檢查可選擇執(zhí)行的靜態(tài)類型
- pydocstyle-檢查是否符合Python文檔字符串約定
- pycodestyle (pep8)-根據(jù)PEP 8中的一些樣式約定檢查Python代碼
- prospector-分析Python代碼并輸出有關(guān)錯(cuò)誤、潛在問(wèn)題、違反約定和復(fù)雜性的信息
- pylama-多個(gè) Python 工具(pycodestyle、ydocstyle、PyFlakes、Mccabe、Pylint、Radon、gjslint、elate、mypy)的封裝器
- Bandit-查找 Python 代碼中常見(jiàn)的安全問(wèn)題
Pylint是默認(rèn)的內(nèi)聯(lián)程序,因此在創(chuàng)建新Python程序時(shí)會(huì)啟用。不過(guò),如果Visual Studio Code沒(méi)有檢測(cè)到已啟用的內(nèi)核,就會(huì)顯示安裝Pylint的提示。
您可以使用命令面板上的 Python 命令選擇啟用不同的linter: Select Linter(選擇內(nèi)核)。從列表中選擇一個(gè)接口,安裝其軟件包并在環(huán)境中啟用該接口。
如果不需要Linter,可設(shè)置"python.linting.enabled": false。
3.4.2 Run Linting
運(yùn)行l(wèi)inter(默認(rèn)運(yùn)行)時(shí),結(jié)果會(huì)顯示在 "問(wèn)題"面板中,具體問(wèn)題會(huì)在代碼編輯器中以下劃線標(biāo)出。要查看編輯器中的詳細(xì)信息,請(qǐng)將鼠標(biāo)懸停在有下劃線的問(wèn)題上。
試試看 在 circle_area.py 文件中創(chuàng)建一個(gè)語(yǔ)法錯(cuò)誤,這樣該錯(cuò)誤就會(huì)被校驗(yàn)程序檢測(cè)到,并顯示在 "問(wèn)題 "面板中。
3.4.2 Linting
既可以在全局范圍內(nèi),也可以針對(duì)每個(gè)字段修改著色設(shè)置。你可以在 settings.json 文件中應(yīng)用所有設(shè)置更改。接下來(lái)提供的是全局設(shè)置,通過(guò)修改這些設(shè)置,可以在所有啟用的詞檢器中改變?cè)~檢行為。
如果啟用了lintOnSave,可能還需要啟用通用的files.autoSave選項(xiàng)。自動(dòng)保存會(huì)在配置的延遲后或焦點(diǎn)離開(kāi)編輯器時(shí)保存更改。如果啟用了自動(dòng)保存,就無(wú)需手動(dòng)保存文件。結(jié)合使用lintOnSave和files.autoSave,就能在輸入代碼的同時(shí)頻繁地獲得語(yǔ)法檢查反饋。
設(shè)置的更多信息,請(qǐng)?jiān)L問(wèn) code.visualstudio.com/docs/python/linting#_specific-linters。
3.5 重構(gòu)
重構(gòu)的目的是在保持功能的同時(shí)改進(jìn)程序的內(nèi)部結(jié)構(gòu)或架構(gòu)。重構(gòu)應(yīng)該是程序更新或添加新功能之前的一項(xiàng)常規(guī)任務(wù)。重構(gòu)的好處包括提高穩(wěn)定性和性能、降低復(fù)雜性、減少測(cè)試和查找錯(cuò)誤的時(shí)間。
雖然您可以手動(dòng)重構(gòu)代碼,但對(duì)于冗長(zhǎng)的程序來(lái)說(shuō),這樣的任務(wù)會(huì)變得非常繁重。幸運(yùn)的是,Visual Studio Code提供了三種命令來(lái)幫助快速進(jìn)行修改。
- 提取變量
- 提取方法
- 分類導(dǎo)入
每條命令都可以從 "命令調(diào)板 "或右鍵單擊選區(qū)時(shí)出現(xiàn)的上下文菜單中調(diào)用。
重構(gòu)需要Rope庫(kù),可以使用 pip install rope 或 conda install -c anaconda rope 安裝。
3.5.1 提取變量
如果您發(fā)現(xiàn)代碼中多處使用了相同的常量值或表達(dá)式,例如相同的字符串或數(shù)字,請(qǐng)考慮提取所有類似的情況并用變量替換。Extract Variable(Python 重構(gòu):提取變量命令提供了這樣的功能。調(diào)用時(shí),新變量將被命名為 newvariableNNN,其中NNN 是隨機(jī)數(shù)。
3.5.2 提取方法
Extract Method 命令 (Python Refactor: Extract Method) 提取所選表達(dá)式或代碼塊的所有類似出現(xiàn),創(chuàng)建一個(gè)方法,并用方法調(diào)用替換表達(dá)式。新方法的名稱是 newmethodNNN,其中NNN是隨機(jī)數(shù)。
試試看 circle_area.py 中 import 語(yǔ)句之后的所有代碼都可以重構(gòu)為一個(gè)方法。將代碼重構(gòu)為方法。
3.5.3 使用 Sort Imports 按字母順序?qū)λ袑?dǎo)入語(yǔ)句進(jìn)行合并和排序。
3.6 代碼片段
如果發(fā)現(xiàn)自己在一個(gè)文件或多個(gè)文件中重復(fù)使用一種代碼模式,可以考慮將該模式放入代碼片段中。片段是代碼模板,可以在輸入時(shí)添加到編輯器中,從而減少創(chuàng)建程序所需的擊鍵次數(shù)。Visual Studio Code 有許多內(nèi)置代碼片段。然而,語(yǔ)言擴(kuò)展(如 Visual Studio Code 的 Python 擴(kuò)展)通過(guò)提供一套標(biāo)準(zhǔn)的特定語(yǔ)言代碼片段,進(jìn)一步擴(kuò)展了可用代碼片段列表。
使用鍵盤(pán)快捷鍵 Ctrl+spacebar或插入片段命令可以調(diào)用片段。調(diào)用時(shí),Visual Studio Code 會(huì)顯示可用片段列表。從列表中選擇一個(gè)片段,就可以將代碼模板添加到編輯器中光標(biāo)所在的行中。
試試看運(yùn)行Insert Snippet命令,查看Python擴(kuò)展提供的可用代碼片段列表。
盡管 Python 擴(kuò)展提供了各種通用的代碼段,但您可能還是想為自己最常用的代碼模式創(chuàng)建自己的代碼段。
片段是在片段文件中以JSON 格式創(chuàng)建的。片段文件支持C風(fēng)格注釋,并可定義數(shù)量不限的片段。要?jiǎng)?chuàng)建片段,請(qǐng)導(dǎo)航至代碼或選擇文件 ? 首選項(xiàng) ? 用戶片段。出現(xiàn)提示時(shí),選擇Python作為語(yǔ)言。打開(kāi)的python.json片段文件包含如何創(chuàng)建片段的說(shuō)明。請(qǐng)務(wù)必在大括號(hào)內(nèi)創(chuàng)建片段,完成后保存文件。
{
// Place your snippets for python here. Each snippet is defined
under a snippet name and has a prefix, body and
// description. The prefix is what is used to trigger the snippet
and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and
${1:label}, ${2:another} for placeholders. Placeholders with the
// same ids are connected.
// Example:
// "Print to console": {
// "prefix": "log",
// "body": [
//
"console.log('$1');",
//
"$2"
// ],
// "description": "Log output to console"
// }
}
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-661344.html
有關(guān)如何創(chuàng)建代碼段的更多信息,請(qǐng)查看 code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-your-snippets。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-661344.html
到了這里,關(guān)于Python程序員Visual Studio Code指南3 編輯代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!