在 Visual Studio Code 中编辑 Python
原文:https://code.visualstudio.com/docs/python/editing#_formatting
Python 扩展提供了许多用于在 Visual Studio Code 中编辑 Python 源代码的功能:
自动完成和智能感知#
为当前工作文件夹中的所有文件和安装在标准位置的 Python 包提供自动完成和智能感知。
编辑时,您可以右键单击不同的标识符以利用几个方便的命令
- Go to Definition ( F12 ) 从您的代码跳转到定义对象的代码。当您使用库时,此命令很有用。
- Peek Definition ( Alt+F12 ) 类似,但直接在编辑器中显示定义(在编辑器窗口中留出空间以避免遮挡任何代码)。按Escape关闭 Peek 窗口或使用右上角的x。
- Go to Declaration跳转到代码中声明变量或其他对象的位置。
- Peek 声明类似,但直接在编辑器中显示声明。同样,使用Escape或右上角的x关闭 Peek 窗口。
自定义 IntelliSense 行为#
您还可以自定义自动完成和 IntelliSense 的一般行为,甚至完全禁用这些功能。请参阅自定义 IntelliSense。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kd0PAXrE-1626945081360)(https://code.visualstudio.com/assets/docs/python/editing/python-editing.gif)]
提示:查看VS Code的IntelliCode 扩展(预览版)。IntelliCode 为 Python 中的 IntelliSense 提供了一组 AI 辅助功能,例如根据当前代码上下文推断最相关的自动完成。有关更多信息,请参阅IntelliCode for VS Code 常见问题解答。
为自定义包位置启用 IntelliSense #
要为安装在其他非标准位置的包启用 IntelliSense,请将这些位置添加到python.autoComplete.extraPaths
设置文件的集合中(默认集合为空)。例如,您可能已经安装了安装在自定义位置的 Google App Engine,app.yaml
如果您使用 Flask ,则在 中指定。在这种情况下,您可以按如下方式指定这些位置:
视窗:
"python.autoComplete.extraPaths": [
"C:/Program Files (x86)/Google/google_appengine",
"C:/Program Files (x86)/Google/google_appengine/lib/flask-0.12"]
macOS/Linux:
"python.autoComplete.extraPaths": [
"~/.local/lib/Google/google_appengine",
"~/.local/lib/Google/google_appengine/lib/flask-0.12" ]
该python.autoComplete.addBrackets
设置(默认false
)还决定了 VS Code()
在自动补全函数名称时是否自动添加括号 ( )。例如,如果您设置addBrackets
为true
:
"python.autoComplete.addBrackets": true,
然后写import os
后跟os.getc
,你会看到自动完成os.getcwd
。选择自动完成添加os.getcwd()
到您的源代码并将光标放在括号内。当设置为 false 时,只os.getcwd
添加到文件中。
有关 IntelliSense 的更多信息,请参阅IntelliSense。
故障排除#
如果自动完成和 IntelliSense 不适用于自定义模块,请检查以下原因:
原因 | 解决方案 |
---|---|
python解释器的路径不正确 | 检查pythonPath 设置。如果您进行更正,请重新启动 VS Code。 |
自定义模块位于非标准位置(未使用 pip 安装)。 | 将位置添加到python.autoComplete.extraPaths 设置中并重新启动 VS Code。 |
快速修复#
添加导入快速修复允许您快速完成导入语句。首先在编辑器中输入一个包名,你会注意到一个代码操作可用于自动完成源代码行(只要你在环境中安装了模块)。将鼠标悬停在文本上(用波浪线标记),然后在出现时选择 Code Action 灯泡。然后,您可以从潜在导入列表中进行选择。请注意,以下示例中的功能由 Pylance 语言服务器提供。
添加导入代码操作还识别以下常见 Python 包的一些流行缩写:numpy
作为 np、tensorflow
作为 tf、pandas
作为 pd、matplotlib.pyplot
作为 plt matplotlib
、、作为 mpl、math
作为 m、scipi.io
作为 spio 和scipy
作为 sp、panel
作为 pn 和holoviews
作为高压
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NneO8PnX-1626945081382)(https://code.visualstudio.com/assets/docs/python/editing/packageAbbreviations.gif)]
导入建议列表的顺序是包(或模块)的导入语句在顶部,然后是来自指定包的附加模块和/或成员(类、对象等)的语句。
在终端(REPL)中运行选择/行#
在Python中:在Python的终端运行选择/ Line命令(Shift + Enter键)是一个简单的方式,采取选择的任何代码,或在当前行的代码,如果没有选择,并在Python航站楼运行。在编辑器中的选择的上下文菜单上也提供了相同的在 Python 终端运行选择/行命令中。
VS Code 会根据选择的第一个非空行自动删除缩进,并相应地向左移动所有其他行。
在终端/REPL 中运行的源代码是累积的,直到终端的当前实例关闭。
如有必要,该命令会打开 Python 终端;您还可以直接使用Python: Start REPL命令打开交互式 REPL 环境。(初始启动可能需要一些时间,特别是如果您运行的第一个语句是import
.)
在第一次使用Python: Run Selection/Line in Python Terminal命令时,VS Code 可能会在环境准备好之前将文本发送到 REPL,在这种情况下,不会运行选择或行。如果遇到此行为,请在 REPL 加载完成后再次尝试该命令。
格式化#
通过对行间距、缩进、操作符周围的间距等应用特定的规则和约定,格式化使代码更容易被人类阅读(参见autopep8页面上的示例)。格式化不会影响代码本身的功能。(另一方面,Linting分析代码中常见的语法、风格和功能错误以及可能导致错误的非常规编程实践。尽管格式化和 linting 之间有一些重叠,但这两种功能是互补的。)
Python 扩展支持使用autopep8(默认)、black或yapf 进行源代码格式化。
常规格式设置#
设置 (python.formatting.) | 默认值 | 描述 |
---|---|---|
提供者 | "autopep8" | 指定要使用的格式化程序,“autopep8”、“yapf”或“black”。 |
特定于格式化程序的设置#
以下设置适用于各个格式化程序。Python 扩展在当前中pythonPath
查找格式化程序。要在另一个位置使用格式化程序,请在适当的自定义路径设置中指定该位置。该pip install
命令可能需要提升。
格式化程序 | 安装步骤 | 参数设置 (python.formatting.) | 自定义路径设置 (python.formatting.) |
---|---|---|---|
autopep8 | pip install pep8 pip install --upgrade autopep8 | autopep8Args | autopep8Path |
黑色(见注释) | pip 安装黑色 | 黑色参数 | 黑色路径 |
亚普夫 | pip 安装 yapf | yapfArgs | 路径 |
注意:默认情况下,当 Python 2 环境处于活动状态时,无法安装 Black 格式化程序。尝试这样做可能会显示消息“未安装黑色格式化程序。安装?”。如果您尝试安装 Black 作为响应,则会出现另一条消息,提示“找不到满足 black 要求的版本’找不到黑色的匹配发行版。”
要解决此问题并在 Python 2 中使用 Black 格式化程序,请首先在 Python 3 环境中安装 Black。然后将
python.formatting.blackPath
设置设置为该安装位置。
使用自定义参数时,命令行上由空格分隔的参数字符串的每个顶级元素必须是 args 列表中的一个单独项目。例如:
"python.formatting.autopep8Args": ["--max-line-length", "120", "--experimental"],
"python.formatting.yapfArgs": ["--style", "{based_on_style: chromium, indent_width: 20}"],
"python.formatting.blackArgs": ["--line-length", "100"]
在第二个示例中,顶级元素{based_on_style: chromium, indent_width: 20}
是包含在大括号中的单个值,因此该值内的空格不会描绘出单独的元素。
故障排除#
如果格式化失败,请检查以下可能的原因:
原因 | 解决方案 |
---|---|
python解释器的路径不正确。 | 检查pythonPath 设置。 |
当前环境中未安装格式化程序。 | 打开命令提示符,导航到pythonPath 设置中指定的位置,然后运行pip install 格式化程序。 |
格式化程序的路径不正确。 | 检查相应python.formatting.<formatter>Path 设置的值。 |
格式化程序的自定义参数不正确。 | 检查适当的python.formatting.<formatter>Path 设置不包含参数,并且python.formatting.<formatter>Args 包含单个顶级参数元素的列表,例如"python.formatting.yapfArgs": ["--style", "{based_on_style: chromium, indent_width: 20}"] . |
弹出警告信息 Black does not support the "Format Select" command. | black 不支持格式化代码部分,可以通过以下设置来防止"[python]": {"editor.formatOnPaste": false, "editor.formatOnSaveMode": "file"} 。 |
重构#
Python 扩展添加了以下重构命令:Extract Variable、Extract Method和Sort Imports。
提取变量#
提取当前范围内所选文本的所有相似出现,并将其替换为变量。新方法被命名为newvariableNNN
NNN 是一个随机数。
调用者:
- 上下文菜单:右键单击一个选择并选择Extract Variable。
- 命令面板 ( Ctrl+Shift+P ),然后是Python 重构:提取变量。
- 为
python.refactorExtractVariable
命令分配键盘快捷键。
提取方法#
提取当前范围内所选表达式或块的所有相似出现,并用方法调用替换它。新方法被命名为newmethodNNN
NNN 是一个随机数。
调用者:
- 上下文菜单:右键单击一个选择并选择Extract Method。
- 命令面板 ( Ctrl+Shift+P ),然后是Python 重构:提取方法。
- 为
python.refactorExtractMethod
命令分配键盘快捷键。
排序进口#
Sort Imports 使用 isort 包将来自同一模块的特定导入合并到单个import
语句中,并按import
字母顺序组织语句。
调用者:
- 在编辑器中右击并选择Sort Imports(不需要选择)
- 命令面板 ( Ctrl+Shift+P ),然后是Python 重构:对导入进行排序
- 为
python.sortImports
命令分配键盘快捷键
isort 的自定义参数在python.sortImports.args
设置中指定,其中每个顶级元素,在命令行上用空格分隔,是数组中的一个单独项目:
"python.sortImports.args": ["-rc", "--atomic"],
要使用自定义 isort 脚本,请使用python.sortImports.path
设置来指定路径。
进一步的配置可以存储在.isort.cfg
文件中,如isort 配置中所述。
注意:对于那些从 isort4 迁移到 isort5 的人,一些 CLI 标志和配置选项已更改,请参阅项目的isort5 升级指南。