编辑 Python 代码并使用 Intellisense

由于将大量开发时间都用在了代码编辑器中,因此可借助 Visual Studio 中的 Python 的支持中的功能来提高工作效率。 这些功能包括 IntelliSense 语法突出显示、自动完成、签名帮助、方法重写、搜索和导航。

代码编辑器与 Visual Studio 中的“交互”窗口集成。 工作时,可以轻松地在两个窗口之间交换代码。 有关详细信息,请参阅教程步骤 3:使用 REPL 交互窗口使用交互窗口:Send to Interactive 命令

大纲显示有助于将重点放在代码的特定部分。 有关在 Visual Studio 中编辑代码的常规文档,请参阅代码编辑器功能

使用 Visual Studio 对象浏览器,可以检查每个模块中定义的 Python 类以及这些类中定义的函数。 可以在“视图”菜单上或使用键盘快捷键 Ctrl+Alt+J 来访问此功能。

使用 IntelliSense 功能

IntelliSense 可提供完成签名帮助快速信息代码着色等功能。 Visual Studio 2017 版本 15.7 及更高版本还支持类型提示

为了提高性能,Visual Studio 2017 15.5 及更早版本中的 IntelliSense 将依赖于为项目中的每个 Python 环境生成的完成数据库。 如果添加、移除或更新包,则可能需要刷新数据库。 数据库状态将显示在“IntelliSense”选项卡上的“Python 环境”窗口(“解决方案资源管理器”的伴侣)中。有关详细信息,请参阅环境窗口引用

Visual Studio 2017 版本 15.6 及更高版本使用另外一种方法提供不依赖于数据库的 IntelliSense 完成。

完成

完成显示为语句、标识符和可能在编辑器的当前位置输入的其他字词。 Intellisense 基于上下文填充选项列表,并筛选不正确或分散注意力的项。 完成通过输入不同的语句(如 import)和运算符(包括句点)触发,但可以随时通过选择键盘快捷键 Ctrl+J +Space 使其显示。

显示 Visual Studio 编辑器中通过 Intellisense 的成员完成的屏幕截图。

打开完成列表时,可使用箭头键、鼠标或通过继续键入搜索所需完成。 随着键入更多的字母,将进一步筛选列表以显示可能的完成。 还可以使用如下快捷方式:

  • 键入非名称开头的字母,如键入“parse”查找“argparse”
  • 仅键入位于单词开头的字母,如键入“abc”查找“AbstractBaseClass”或键入“air”查找“as_integer_ratio”
  • 跳过字母,如键入“b64”查找“base64”

以下是一些示例:

显示 Visual Studio 编辑器中使用筛选的成员完成的屏幕截图。

在变量或值后键入一个句点后将自动显示成员完成,并显示可能类型的方法和属性。 如果变量可以是多个类型,则列表包括所有类型中的所有可能性。 显示额外信息以指示哪些类型支持每个完成。 如果所有可能的类型都支持完成,则不会显示任何批注。

显示 Visual Studio 编辑器中关于多种类型的成员完成的屏幕截图。

默认情况下,不显示以双下划线开头和结尾的“dunder”成员。 一般情况下,无法直接访问这类成员。 如果需要使用 dunder,请键入前导双下划线将这些完成添加到列表:

显示 Visual Studio 编辑器中的专用 dunder 成员完成类型的屏幕截图。

importfrom ... import 语句会显示一系列可以导入的模块。 from ... import 语句会生成一个列表,其中包含可以从指定模块导入的成员。

显示 Visual Studio 编辑器中的 import 和 from import 完成的屏幕截图。

raiseexcept 语句会显示可能为错误类型的类列表。 该列表可能不包括用户定义的所有异常,但有助于快速查找合适的内置异常:

显示 Visual Studio 编辑器中的异常完成的屏幕截图。

选择 @ 符号 (at) 将启动修饰器并显示潜在的修饰器。 其中许多项不能用作修饰器。 检查库文档以确定要使用的修饰器。

显示 Visual Studio 编辑器中的修饰器完成的屏幕截图。

有关详细信息,请参阅选项 - 完成结果

类型提示

Visual Studio 2017 版本 15.7 及更高版本中提供了类型提示。

Python 3.5+ 中的“类型提示”(PEP 484 (python.org) 是用于函数和指示参数类型、返回值以及类属性的类的注释语法。 将鼠标悬停在包含这些注释的函数调用、参数和变量上时,IntelliSense 显示类型提示。

以下示例中,Vector 类声明为 List[float] 类型,并且 scale 函数包含其参数和返回值的类型提示。 将鼠标悬停在该函数的调用上,会显示类型提示:

显示如何将鼠标悬停在函数调用上以显示类型提示的屏幕截图。

在下一个示例中,可以看到 Employee 类的注释属性如何在属性的 IntelliSense 完成弹出窗口中显示:

显示具有类型提示的类的 IntelliSense 完成的屏幕截图。

这也有助于在整个项目中验证类型提示,因为通常在运行时才会显示错误。 >为此,Visual Studio 通过“解决方案资源管理器”中的“Python”“运行 Mypy”上下文菜单命令,集成行业标准 MyPy 工具:

显示解决方案资源管理器中 Python 项目的可用 lint 分析命令的屏幕截图。

如果需要,运行该命令会提示安装 Mypy 包。 然后,Visual Studio 会运行 Mypy,验证项目中每个 Python 文件的类型提示。 错误在 Visual Studio“错误列表”窗口中显示。 在窗口中选择一个项可导航到代码中的相应行。

举一个简单的例子,以下函数定义包含一个类型提示,指示 input 参数为 str 类型,但是对该函数的调用则尝试传递一个整数:

def commas_to_colons(input: str):
    items = input.split(',')
    items = [x.strip() for x in items]
    return ':'.join(items)

commas_to_colons(1)

使用此代码上的 Run Mypy 命令生成以下错误

显示 Mypy 验证类型提示的示例结果的屏幕截图。

注意

对于 Python 3.5 之前的版本,Visual Studio 也显示用户通过 Typeshed 存根文件 (.pyi) 提供的类型提示。 如果不希望直接在代码中添加类型提示,或创建不直接使用它们的库的类型提示,可以使用存根文件。 有关详细信息,请参阅 Mypy 项目 wiki 中的为 Python 模块创建存根

目前,Visual Studio 不支持注释中的类型提示。

签名帮助

编写调用函数的代码时,键入左括号 ( 时会显示签名帮助。 它会显示可用的文档和参数信息。 可以在函数调用中使用键盘快捷键 Ctrl+Shift+Space 访问签名帮助。 显示的信息取决于函数源代码中的文档字符串,但包括所有默认值。

显示 Visual Studio 编辑器中的签名帮助的屏幕截图。

提示

>>>>若要禁用签名帮助,请转到“工具”“选项”“文本编辑器”“Python”“常规”。 >清除“语句完成”“参数信息”复选框。

快速信息

将鼠标指针悬停在标识符的上方可显示快速信息工具提示。 根据标识符,快速信息可能会显示可能的值或类型、所有可用文档、返回类型以及定义位置:

显示 Visual Studio 编辑器中的“快速信息”显示信息的屏幕截图。

代码着色

代码着色使用代码分析中的信息为变量、语句和代码的其他部分着色。 引用模块或类的变量可能以不同于函数或其他值的颜色显示。 参数名称可能以不同于本地或全局变量的颜色显示。 默认情况下,函数不以粗体形式显示。

显示 Visual Studio 编辑器中的代码和语法着色的屏幕截图。

>>>若要自定义颜色,请转到“工具”“选项”“环境”“字体和颜色”。 在“显示项”列表中,修改所需的 Python 条目:

显示 Visual Studio 中“字体”和“颜色”选项的屏幕截图。

插入代码片段

>>代码片段是可通过使用键盘快捷键并选择 Tab 来插入文件的几段代码。你也可以使用“编辑”“IntelliSense”“插入代码”和“外侧代码”命令,选择“Python”,然后选择所需代码段。

例如,class 是一个插入类定义的代码片段的快捷方式。 在键入 class 时,将在自动完成列表中显示代码片段:

显示类快捷方式的代码片段的屏幕截图。

选择 Tab 将生成类的剩余部分。 然后可以在名称和基列表上键入,使用 Tab 在突出显示的字段间移动,然后选择 Enter 开始键入正文。

显示突出显示要完成的代码片段的区域的屏幕截图。

>>在使用“编辑”“IntelliSense”“插入代码片段”菜单命令时,首先选择“Python”,然后选择所需的代码段:

显示如何通过插入代码片段命令选择代码片段的屏幕截图。

>>“编辑”“IntelliSense”“外侧代码”命令将当前选择的内容置于所选结构化元素内的文本编辑器中。 假设你有一段如下例所示的代码:

sum = 0
for x in range(1, 100):
    sum = sum + x

选中此代码并选择“外侧代码”命令将显示可用代码段的列表。 从代码片段列表中选择 def 会将所选代码置于函数定义中。 可以使用 Tab 键在突出显示的函数名称和参数之间导航:

显示如何对代码片段使用“环绕”命令的屏幕截图。

检查可用片段

可以在“代码片段管理器”中看到可用的代码片段。 >从“工具”“代码片段管理器”访问此功能,并选择“Python”作为语言:

显示 Visual Studio 中的代码片段管理器的屏幕截图。

若要创建自己的代码段,请参阅演练:创建代码段

如果编写优质的代码片段并且想要将其共享,请随时发布到 gist 并告诉我们。 我们可能将其包含在 Visual Studio 的未来版本中。

Visual Studio 中的 Python 支持提供了多种在代码中快速导航的方法,包括源代码可用的库。 可以使用导航栏的源代码、“转到定义”、“转到”和“查找所有引用”命令查找库。 还可以使用 Visual Studio 对象浏览器

导航栏在每个编辑器窗口的顶部显示且包含两级定义列表。 左侧下拉列表包含当前文件中的顶级类和函数定义。 右侧下拉列表显示左侧所示作用域内的定义列表。 在编辑器中移动时,列表会进行更新,以显示当前上下文,并且还可以从这些列表中选择某项以直接转入。

显示 Visual Studio 编辑器中的导航栏的屏幕截图。

提示

若要隐藏导航栏,请转到“工具”>“选项”>“文本编辑器”>“Python”>“常规”,然后清除“设置”>“导航栏” 。

转到定义

“转到定义命令”可从使用标识符(如函数名、类或变量)快速跳转至源代码定义的位置。 若要调用该命令,请右键单击标识符并选择“转到定义”,或将插入符号放在标识符中并选择 F12。 如果源代码可用,该命令可用于代码和外部库。 如果库源代码不可用,则“转到定义”将跳转到模块引用的相关 import 语句或显示错误

显示 Visual Studio 中“转到定义”命令的屏幕截图。

转到

>“编辑”“转到”命令(Ctrl+)会在编辑器中显示搜索框,可在搜索框中键入任何字符串并查看在定义函数、类或变量的代码中是否存在包含此字符串的匹配项。 此功能与“转到定义”类似,但无需查找标识符的使用

若要导航到该标识符的定义,请双击任何名称或使用箭头键后跟 Enter 选择名称。

显示 Visual Studio 中“转到”命令的屏幕截图。

查找所有引用

“查找所有引用”功能是一种有用的方法,用于发现同时定义和使用任何给定标识符的位置,包括导入和分配。 若要调用该命令,请右键单击标识符并选择“查找所有引用”,或将插入符号放在标识符中并选择 Shift+F12。 双击列表中的项可导航到其位置。

显示 Visual Studio 中“查找所有引用”结果的屏幕截图。