ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Spyder 内置教程全解:从运行首个 Python 程序到调试、绘图与代码规范实战

2026/9/25 2:50:25 拓冰建站 浏览量
Spyder 内置教程全解:从运行首个 Python 程序到调试、绘图与代码规范实战 开发工具IDE代码编辑器【免费下载链接】spyderOfficial repository for Spyder - The Scientific Python Development Environment项目地址https://gitcode.com/gh_mirrors/sp/spyder点击查看免费下载SpyderScientific Python Development Environment为科学计算场景提供了编辑器、控制台、变量浏览器等一整套开发设施。本文以仓库内随 Spyder 一起分发的内置教程 tutorial.rst 为骨架系统讲解如何用 Spyder 运行程序、在 IPython 控制台与命名空间之间高效协作、配置运行与风格检查、掌握快捷键、编写规范的 docstring并完成断点调试与 Matplotlib 绘图。读完本文你将获得一份可直接照做的 Spyder 上手与进阶路线图同时理解这些操作在 Spyder 源码与 spyder-kernels 内核中的真实实现。教程从哪里来内置教程的加载与渲染机制这份教程不是独立的在线文档而是随 Spyder 打包、在 Help 面板中动态渲染的交互式内容。在 Help 面板默认位于窗口右上角的 Usage 页你会看到New to Spyder? Read our tutorial的入口点击后会通过spy://tutorial这个内置 URL 触发加载相关实现位于 plugin.py 与 widgets.pyshow_tutorial()使用get_module_source_path(spyder.plugins.help.utils)定位到utils目录读取其中的tutorial.rst源文件同时把utils/static/images作为图片目录传入渲染上下文因此教程中引用的截图如images/spyder-hello-docstring.png会被正确解析最终内容交给基于 Sphinx 的渲染管线处理Sphinx 配置见 conf.py渲染过程封装在 sphinxify.py 中。值得一提的细节是conf.py 会根据用户在偏好中是否启用数学公式渲染动态决定挂载sphinx.ext.jsmath还是sphinx.ext.mathjax扩展并通过mathjax_path MathJax/MathJax.js指向仓库内自带的 MathJax位于utils/js/mathjax。这就是你在帮助面板中看到 LaTeX 风格数学公式渲染的底层支撑。如果你是 Python 与 Spyder 的初学者从下一节开始逐步操作若已熟悉基本用法可直接跳到快捷键、运行配置或调试章节。第一步在 Spyder 中运行你的第一个程序编写并运行 hello.py先在 Spyder 的**编辑器Editor**窗格中新建文件菜单File -- New file或快捷键Ctrl-N/Command-N粘贴以下代码并保存为hello.py# Demo file for Spyder Tutorial # Hans Fangohr, University of Southampton, UK def hello(): Print Hello World and return None. print(Hello World) # Main program starts here hello()然后选择菜单Run -- Run或按F5执行首次运行时如果弹出Run settings对话框确认即可。程序会在IPython 控制台默认位于右下角中执行你应该看到类似输出In [1]: %runfile /File/Path/hello.py --wdir Hello World In [2]:这里%runfile后面的具体路径取决于你保存文件的位置它是 Spyder 自动插入的。恭喜你刚刚完成了第一个 Spyder 程序的运行。执行时到底发生了什么Python 解释器对hello.py的处理过程如下逐行读取文件忽略以#开头的注释行遇到def关键字时知道此处正在定义函数——def hello():之后所有缩进的行都属于函数体。注意此时只是创建了函数对象函数并未被调用当解释器遇到写在最左列的普通命令非def等关键字时会立即执行在hello.py中这一行就是hello()它真正调用执行了名为hello的函数。如果注释或删除hello()这一行再按F5运行整个文件将不会有任何输出——因为函数被定义但没有被调用。源码视角%runfile 是什么教程输出的%runfile并非普通 IPython 自带命令而是 Spyder 在 IPython 内核中注册的自定义魔术命令。它的实现位于 code_runner.py由SpyderCodeRunner类提供并通过runfile_arguments装饰器定义了完整的参数集合见 code_runner.py参数含义filename要运行的文件名--args传递给脚本的命令行参数字符串--wdir脚本运行的工作目录--post-mortem出错时进入事后调试post-mortem模式--current-namespace在当前命名空间中运行--namespace指定运行文件所用的命名空间内核侧的测试用例test_console_kernel.py专门验证了runfile在正确命名空间中执行、支持--current-namespace等行为例如其中的test_runfile用例。这解释了为什么教程输出中会出现--wdirSpyder 默认把运行工作目录设为脚本所在目录。在控制台中调用函数、检查对象与更新对象在 Console 中调用已定义的函数执行过hello.py后函数对象hello就存在于IPython 控制台的命名空间中。在控制台提示符In [?]?为执行计数旁直接输入hello()并按EnterIn [ ]: hello() Hello World注意这与按F5重跑整个文件的区别F5会让 Python 重新遍历文件、创建新的hello函数对象并执行而在控制台调用hello()只是调用之前已在控制台命名空间中定义好的那个函数对象。用 dir() 检查命名空间Python 内置函数dir()会列出当前命名空间中的所有已知对象。在提示符输入dir()暂时忽略所有以下划线_开头的条目你应该能在列表中看到hello。提示如果你得到一长串对象列表说明 Spyder 已经为你做了便捷导入。可以先用后文介绍的重置命名空间方法清空再按F5执行hello.py然后运行dir()验证。用 help() 与 Ctrl-I 查看文档一旦对象出现在当前命名空间就可以用help函数了解它。在控制台输入help(hello)In [ ]: help(hello) Help on function hello in module __main__: hello() Print Hello World and return None.这些信息来自两部分参数数量与名称等信息是 Python 通过自省inspection获得的而Print Hello World and return None.则来自函数的docstring——即def hello():下面第一行开始的字符串按惯例用三对双引号包裹。Spyder 还提供了Help 面板默认位于右上角。把光标停在某个对象名上按Ctrl-ImacOS 为Command-IHelp 面板就会自动显示与help(hello)相同的内容这个功能在控制台和编辑器中都有效。Help 面板的富文本渲染由前文提到的 Sphinx 管线完成这也正是下文 docstring 格式化章节的意义所在。更新对象F5 全量重跑 vs F9 局部执行假设你想修改已有函数的行为如何让 Python 认可你的修改简单策略重新执行整个程序。在编辑器中把hello改成打印Good Bye World按F5Good Bye World原理是 Python 遍历整个hello.py创建新的hello函数对象覆盖旧的再执行之。深入观察对象持久性分四步验证先把函数改回打印Hello World按F5确认输出正确在控制台调用hello()看到Hello World把函数改成打印Later World并保存文件但不要按F5再次在控制台调用hello()In [ ]: hello() Hello World原因很明确控制台中的hello对象仍是旧的、打印Hello World的那个。修改文件本身并不会影响控制台里已经创建的对象。要让控制台命名空间里的对象更新有两个选择选项 1按F5重新执行整个hello.py创建新的hello对象并覆盖旧对象之后调用hello()就会输出Later World选项 2在编辑器中选择你修改过的区域本例为整个函数从def hello():到print(Later World)然后选择菜单Run -- Run current line/selection或按F9。这样只把选中的代码送入控制台执行In [ ]: def hello(): ...: Print Hello World and return None. ...: print(Later world) ...: In [ ]: hello() Later world只执行部分代码来更新对象这一能力在开发与调试复杂程序时价值巨大当在控制台会话中重建某些对象/数据耗时很长时你只需反复重跑正在修改的函数或类、对象其余数据可以一直复用。Python 初学者的推荐起步步骤进入这一节前请确保有一个IPython 控制台处于打开状态默认在右下角。IPython 解释器是科学计算社区的标配随时可以通过菜单Consoles -- Open an IPython Console新建控制台。重置命名空间命名空间namespace即控制台在当前时刻定义的所有对象的集合可以用 IPython 的%reset命令清空。输入%reset并按Enter确认yIn [1]: %reset Once deleted, variables cannot be recovered. Proceed (y/[n])? y In [2]:同样地你可以在IPython 控制台窗格右上角的齿轮选项菜单中选择Remove all variables完成同样操作。执行后会话命名空间中只剩少量对象可用dir()列出In [2]: dir() Out[2]: [In, Out, __builtin__, __builtins__, __name__, _dh, _i, _i2, _ih, _ii, _iii, _oh, _sh, exit, get_ipython, quit]如果想去掉重置时的确认步骤可以用%reset -f或在Remove all variables对话框中勾选Dont show again。追求 PEP 8 代码风格除了 Python 语法本身的约束外社区还广泛遵循关于源码布局的《Python 源码风格指南》PEP 8。遵循该规范写出的代码与绝大多数 Python 程序员风格一致更易阅读、调试与复用。Spyder 可以自动为你检查启用方式见下一节。精选偏好设置偏好设置在哪里Spyder 的大量行为都可以通过偏好设置Preferences配置菜单位置因操作系统而异Windows 与 Linux菜单Tools -- PreferencesmacOS菜单Python/Spyder -- Preferences启用 PEP 8 违规警告进入Tools -- Preferences -- Completion and linting -- Code style and formatting -- Code style勾选Enable code style linting即可让 Spyder 自动按 PEP 8 检查代码风格。开启后编辑器中会在违规行左侧出现相应的警告标记。自动符号数学SymPy模式通过Preferences -- IPython Console -- Advanced Settings -- Use symbolic math可以激活控制台的符号数学sympy模式。该模式由 SymPy 提供支持启动 IPython 控制台时会自动导入部分 SymPy 对象并报告已执行的命令从而支持 LaTeX 风格的数学输出渲染。使用前提系统已安装 SymPy要看到格式化输出还需要安装 LaTeX 发行版。激活后控制台会报告类似这样的自动导入These commands were executed: from sympy import * x, y, z, t symbols(x y z t) k, m, n symbols(k m n, integerTrue) f, g, h symbols(f g h, clsFunction)此后可以直接使用x、y等符号变量进行符号运算例如常用功能快捷键以下为 Spyder 的默认快捷键标记*的项可以在偏好设置的 Keyboard shortcuts 标签页中自定义。macOS 用户请把Ctrl替换为Command把Alt替换为Option。快捷键功能F5*执行当前文件F9*执行当前高亮选中的代码块这在更新控制台会话中的函数定义而无需重跑整个文件时非常有用。若无选区则执行当前行Tab*在控制台和编辑器中自动补全命令、函数名、变量名与方法名建议养成常按的习惯Ctrl-Enter*执行当前单元格菜单Run -- Run cell。单元格定义为以#%%、# %%或# codecell开头的两行之间的代码Shift-Enter*执行当前单元格并将光标移到下一个单元格菜单Run -- Run cell and advance。单元格适合把大文件拆成可独立运行的小块类似 IPython notebookAlt-Up把当前行向上移动多行选中时整组移动。Alt-Down对应向下移动Ctrl-鼠标左键或Alt-G*在编辑器中点击某个函数/方法时打开新编辑器标签页显示其定义Shift-Ctrl-Alt-M*最大化当前窗口再次按下恢复原大小Ctrl-Shift-F*激活 Find in Files 面板可在指定范围内对所有文件执行 grep 式搜索Ctrl-/Ctrl--增大/减小编辑器或控制台的字体大小其他 UI 部分的字体与字号可在Preferences -- General -- Appearance -- Fonts中设置Ctrl-S*编辑器中保存当前编辑的文件同时强制刷新编辑器左栏的警告三角标记否则默认每 2.5 秒自动刷新一次该间隔也可配置Ctrl-S*控制台中把当前 IPython 会话保存为 HTML 文件包括内联显示的所有图表便于快速记录会话过程。注意目前无法把这份记录重新载入会话如需该能力请改用 IPython NotebookCtrl-I*光标置于某对象上时在 Help 面板中打开该对象的文档关于Tab补全教程给了很实用的例子假设定义了mylongvariablename 42要写mylongvariablename 100时只需输入my再按Tab若该前缀唯一完整名称会直接补全若不唯一会弹出候选列表可用Up/Down键配合Enter选择或继续输入更多字符让候选自动收窄。运行配置Run configuration运行配置决定按F5或选择Run -- Run时编辑器中的文件如何被控制台执行。首次运行文件时设置框会自动弹出其他时间可以通过菜单Run -- Configure或按F6打开。配置项中有三种控制台选择。假设编辑器中有如下hello.pydef hello(name): Given an object name, print Hello and the object. print(Hello {}.format(name)) i 42 if __name__ __main__: hello(i)在当前控制台中执行Execute in current console这是默认选项通常也是好选择。选择该模式意味着代码执行后对象的持久性程序运行完成后你可以在运行它的控制台中与之交互尤其可以检查、操作程序创建的对象如i和hello函数。这对增量编码、测试与调试很有用你可以直接从控制台调用hello()而不必重跑整个文件当然修改函数后仍需重跑整个文件或至少重跑函数定义才能让新版本在控制台可见。代码执行前已有对象的可见性执行代码时它能看到控制台会话中此前已定义的全局对象。这些对象可能来自之前的执行、控制台交互或便捷导入如from sympy import *——Spyder 可能自动执行部分便捷导入。这种已有对象对代码可见的特性容易被遗忘而且在代码无意中依赖这些对象时会造成隐蔽错误。教程给出了经典案例运行hello.py后变量i成为控制台中的全局变量你编辑源码意外删除了i 42这一行再次执行该文件hello(i)不会报错因为控制台里恰好还有一个名为i的对象尽管源码中已没有i的定义。此时你保存文件后可能误以为它能在任何环境正确运行但换一个全新的 IPython 控制台会话或直接在系统 shell 中执行python hello.py就会报错——i未定义。问题本质是代码使用了对象i却没有先创建它模块导入也有同样的效应如果在 IPython 提示符导入过sympy那么在同一个控制台会话中运行的程序也能看到它。如何确认代码不依赖这类已有对象见下文如何检查代码能独立正确执行。在专用控制台中执行Execute in a dedicated console选择该模式后每次执行hello.py都会启动一个新的 IPython 控制台。相比在当前控制台中执行它最大的优势是可以确定控制台中没有源自调试和反复执行的全局对象残留。每次运行代码控制台都会被重启。这是一个安全的选择但牺牲了交互式执行的灵活性。如何检查你的代码能独立正确执行如果你选择了在当前控制台中执行有两种方法验证代码是否依赖未定义变量、未导入模块或未执行过的命令方法 1切换到在专用控制台中执行模式再从编辑器运行代码方法 2若想留在当前控制台先用 IPython 魔术命令%reset或Remove all variables菜单项重置命名空间清空所有对象如例子中的i再从编辑器运行代码。建议对初学者推荐使用在当前控制台中执行当一段代码完成后用上述两种方法之一复查它能否独立运行。其他实用观察多文件与标签浏览编辑器打开多个文件时顶部的标签页按打开顺序排列也可以随意拖动调整位置。标签左侧有Browse tabs图标鼠标悬停可见适合在打开较多文件时直接跳转。也可以按Ctrl-Tab或Ctrl-P召唤文件切换器按最近使用顺序导航标签。环境变量在IPython 控制台窗口默认布局的右下角窗口中点击Options菜单齿轮图标选择Show environment variables即可显示环境变量。重置全部自定义配置所有保存在磁盘上的自定义配置可以通过命令行开关重置即运行spyder --reset变量浏览器中的对象操作在Variable Explorer变量浏览器中右键点击对象会显示进一步绘图与分析的操作选项。双击简单变量可以直接编辑其值双击对象会打开新窗口显示其内容并通常允许编辑。Python 集合列表、字典、元组等、NumPy 数组、Pandas 的Index、Series、DataFrame、Pillow 图像等都有专门的 GUI 查看器大部分任意 Python 对象可以像查看其dict()表示那样浏览与编辑。文档字符串docstring格式化写代码时务必编写文档字符串。Spyder 推荐使用 reStructuredTextreST标记并遵循科学 Python 社区通行的 Numpydoc 约定遵循这些规范后Help 面板会渲染出漂亮的文档。例如要让average()函数在 Help 面板中显示成这样你需要这样写文档字符串def average(a, b): Return the average value (arithmetic mean) of two numbers. Parameters ---------- a : numeric A number to average. b : numeric Another number to average. Returns ------- result : numeric The average of a and b, computed using 0.5 * (a b). Example ------- average(5, 10) 7.5 return (a b) * 0.5关键点在于必须使用Parameters这个词并为其加下划线。a : numeric表示参数a的类型是numeric紧接着的缩进行可以用来详细说明该变量代表什么、允许的类型需要满足什么条件等。所有参数以及返回值都应如此描述通常还建议像示例一样附带一个Example。调试Debugging逐行单步执行代码通过菜单Debug -- Debug或快捷键Ctrl-F5启动调试执行会激活 IPython 调试器ipdb。此时编辑器会高亮即将执行的行变量浏览器会显示程序当前执行点的上下文变量。进入调试模式后可以使用Debug工具栏的按钮逐行执行Step按钮或Ctrl-F10逐行执行Step Into按钮或Ctrl-F11进入函数内部查看其工作方式Step Return按钮或Ctrl-Shift-F12跳出当前函数并继续执行下一行。若想在特定位置停下来检查需要插入断点breakpoint在目标行按F12或点击行号右侧位置行首会出现红点表示断点重复同样操作即可移除。进入调试器后按Continue按钮会直接执行到第一个断点处停下。提示也可以在控制台提示符下直接用命令控制调试过程nNext移动到下一条语句sStep into若当前语句是函数调用则进入该函数rReturn执行完当前函数中的所有语句并返回再交还控制权。在调试器内部你仍可以交互式执行常规语句给变量赋值、修改其值、定义与调用函数、设置新断点等。教程给出了一个完整示例把下面代码放入新文件def demo(x): for i in range(5): print(i {}, x {}.format(i, x)) x x 1 demo(0)直接运行Run -- Run会得到i 0, x 0 i 1, x 1 i 2, x 2 i 3, x 3 i 4, x 4改用调试器运行Debug -- Debug不断按Step直到高亮行到达demo(0)函数调用然后按Step Into进入函数继续按Step逐行执行。接着在调试器提示符输入x 10修改x你会看到x在变量浏览器中随之变化并被demo()函数打印出来打印输出会穿插在调试命令与响应之间。这种逐行执行、观察变量变化、手动修改变量的调试能力是理解代码行为并在需要时修正它的强大工具。要终止调试器可以输入exit选择菜单Debug -- Stop或按Ctrl-Shift-F12。异常发生后的事后调试在IPython 控制台中异常抛出后可以直接调用%debug这会进入 IPython 调试模式允许按上述方式检查异常发生处的局部变量。这比在代码里加print再重跑高效得多。配合使用up调试器中按u与down按d命令可以在调用栈中上下移动检查点——上指调用当前函数的那些函数下反之。还可以随时输入pdb来启用或禁用异常发生时自动触发调试器的行为。绘图inline 还是独立窗口你可以决定 Matplotlib 生成的图形显示在哪里内联Inline直接显示在IPython 控制台中便于通过控制台Ctrl-S保存会话记录独立窗口带选项工具栏的新窗口可以交互式缩放、操纵图形、设置各种绘图与显示选项并通过菜单保存为不同文件格式。在控制台分别使用如下命令切换In [ ]: %matplotlib inlineIn [ ]: %matplotlib qt其中%matplotlib qt表示由 Qt 后端渲染、图形显示在自己的窗口中。默认行为可以通过偏好设置定制Preferences -- IPython Console -- Graphics -- Graphics Backend。可以用下面两行快速绘图并测试以上两种模式In [ ]: import matplotlib.pyplot as plt In [ ]: plt.plot(range(10), o)历史说明这份教程最初源自南安普顿大学英国的教学讲义作者使用它向工程师本科与博士生讲授用于计算建模的 Python后由 Spyder 开发团队针对 Spyder 3.3.x 更新为现在的形态。它从运行第一个程序起步一路覆盖控制台交互、命名空间管理、运行配置、代码规范、调试与绘图是理解 Spyder 工作流的一条完整学习路径而它的渲染入口与实现细节都可以在 tutorial.rst、widgets.py 与内核侧的 code_runner.py 中对照查阅。赞分享开发工具IDE代码编辑器【免费下载链接】spyderOfficial repository for Spyder - The Scientific Python Development Environment项目地址https://gitcode.com/gh_mirrors/sp/spyder点击查看免费下载相关推荐终极Integuru实战指南从HAR文件到Python代码的AI驱动集成方案终极Integuru实战指南从HAR文件到Python代码的AI驱动集成方案 Integuru作为首个通过逆向工程平台内部API构建无权限集成的AI代理彻底AI Agent代码生成后端OpCore Simplify黑苹果配置终极指南5分钟搞定OpenCore EFIOpCore Simplify黑苹果配置终极指南5分钟搞定OpenCore EFI 还在为复杂的OpenCore配置而头疼吗OpCore Simplify开发工具CLIcuDF 贡献指南从环境搭建、源码构建到调试与代码规范的全流程实战cuDF 贡献指南从环境搭建、源码构建到调试与代码规范的全流程实战 导读 cuDF 是 RAPIDS 生态中的 GPU DataFrame 库包含 C数据分析数据工程机器学习上一篇Docker-Selenium重试间隔失败请求重试等待时间下一篇keploy故障注入测试主动发现应用弱点的方法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考