Javatpoint标志
Javatpoint标志

了解有关bpython:一个具有类似ide功能的Python REPL

使用Python解释器的默认设置,您可以从文件(REPL)中运行脚本,或者在读取-求值-打印循环中交互式地执行代码。Python包含的默认REPL有几个限制,尽管它是一个强大的工具,可以通过对代码输入的快速反馈来探索语言和学习它的库。幸运的是,有许多更方便和程序员友好的选项可用,例如bpython。

像集成开发环境一样,Python允许您对代码进行实验或快速测试一个想法,而无需在其他程序(IDE)的上下文之间导航。此外,Python可以成为物理或在线课堂上的有效教学工具。

Python初学者指南

bpython不像CPython、PyPy或Anaconda那样是一个独立的Python发行版,它只是一个纯Python包,充当您选择的Python解释器的薄包装。由于可以在任何特定的Python发行版、版本或虚拟环境上使用bpython,因此具有很大的通用性。

该工具的原始创建者和维护者Bob Farrell的名字在bpython中由字母B表示。

Bpython仍然是一个很受欢迎的Python REPL,但它只有一些基本的特性,比如语法高亮显示和自动补全,这些特性都是从功能齐全的Python ide中借来的。与这种极简方法相反,数据科学社区更喜欢像IPython这样的工具,这是一种不同的Python REPL替代品。标准Python中不存在的许多独特命令和其他特性都由IPython添加。

Bpython可以通过几种方式安装在您的计算机上。您的操作系统(如Homebrew或APT)的软件包管理器可以提供预构建版本的Bpython。

然而,它们很可能已经过时,并且预先编程为使用系统范围的Python解释器。

建议使用Pip在虚拟环境中设置最新版本的bpython,即使它可能是从其源代码手动构建的:

不幸的是,由于bpython依赖于curses库,该库仅在macOS和Linux等类unix系统上可用,因此Windows不支持bpython。官方文档引用了一个使用非官方Windows二进制文件的解决方案,但似乎不再有效。如果您使用的是Windows,那么安装Linux的Windows子系统(WSL),然后从那里使用bpython是您的最佳选择。

在不同的虚拟环境中安装多个bpython副本是可以接受的。这使您能够将bpython包装在最初用于构建虚拟环境的特定Python解释器周围。

您可以在安装后使用下面列出的两个命令之一启动bpython:

最好使用第二个命令,它将bpython作为可运行的Python模块调用,并且更显式。通过这样做,您可以确保bpython程序在当前活动的虚拟环境中运行。

另一方面,全局安装的程序(如果有的话)可以通过使用简单的bpython命令静默地恢复。此外,它可能被别名为另一个shell可执行文件,这将优先于本地bpython模块。

既然您已经知道了如何设置和使用bpython作为Python的REPL的替代品,那么是时候研究它的主要特性了。无论您的经验水平如何,以下各节将向您展示bpython可以提高您作为Python程序员的生产力的许多方法。

快速发现错误

与bpython相比,Python的标准REPL就像一台老式黑白电视机。虽然它有效地传达了信息,但有时你更愿意看到颜色更清晰的东西。这在编辑代码时尤其重要,因为每一个小细节都很重要。因此,任何优秀的IDE或代码编辑器最典型的特性可能是语法高亮显示和括号匹配。

尽管bpython仅作为Python REPL的基于文本的用户界面(TUI),但它具有这两个特性。括号匹配使维持开括号和闭括号的正确平衡变得更简单,彩色的语法高亮显示有助于快速识别代码的结构。继续阅读以了解如何使用这些特性。

强调语法

在bpython中编写命令时,它们被标记为字符串、数字或布尔值以及Python术语、操作符、注释和变量等文字值。你可以通过查看对应于每种标记类型的颜色来快速识别你正在使用的语言结构类型:

了解有关bpython:一个具有类似ide功能的Python REPL

在表面之下使用的pyements库执行标记化和着色,而不是直接使用bpython。稍后您将了解如何在bpython中修改颜色主题。

括号匹配

Python的Bpython语法高亮显示还会告诉你代码的开始和结束大括号是否平衡。当你输入一个右括号时,Python会高亮显示对应的左括号,反之亦然:

了解有关bpython:一个具有类似ide功能的Python REPL

此函数使用所有类型的Python括号,包括方括号([]),圆角括号(())和花括号()。更好的是,当游标经过正确的一对括号时,bpython将突出显示它们。这允许您将括号嵌套在另一个括号内。

提高你的打字速度和准确性

您的输入速度和对函数名、参数和其他细节的回忆将直接影响您使用标准Python REPL编写代码的速度。相比之下,bpython提供了有用的建议,您可以通过触摸按钮来使用自动完成。此外,它还提供上下文历史并帮助进行适当的代码缩进。

这些功能可以减少你的打字时间,帮助你避免讨厌的打字错误,让你的工作更快速、更有效。

代码的建议

只要您开始键入内容,bpython就会使用LEGB规则搜索当前的词法作用域、内置的、全局的和Python关键字,以查找名称匹配的对象。更多的字符将帮助您获得更具体的结果,因为它只匹配以一组特定字符开头的名称。在此之后,建议列表将按字母顺序出现:

了解有关bpython:一个具有类似ide功能的Python REPL

如果你不小心调过头了,你可以按Tab键或Shift+Tab键来浏览这些建议。当您的屏幕无法容纳内容时,这尤其有用。

在代码建议的帮助下,使用类型自省查找对象具有的属性和方法变得更加容易。

Auto-Indentation

在默认的Python REPL中,当编写冗长的代码块时,必须手动缩进每行。如果您习惯于在功能丰富的编辑器中编写代码,那么这可能会非常耗时、笨拙且容易出错。幸运的是,当你按下Enter键时,bpython会自动在下一行插入适当的缩进:

了解有关bpython:一个具有类似ide功能的Python REPL

Bpython的标准缩进是四个空格,它遵循PEP 8指南中概述的Python编码约定。如果想要不同的缩进大小,可以在bpython设置中更改匹配的制表符长度设置。无需在该行输入任何内容,就可以按Enter键结束当前代码块。这将把缩进的水平降低一个。

历史背景

用户主目录中的Python历史记录。名称的文件包含命令的历史记录。默认的Python REPL存储了您之前输入的内联命令的无限历史记录,包括那些来自已完成的解释器会话的命令。与许多其他工具一样,交互式Python解释器通过模仿或提供GNU Readline库的接口来控制历史。

Python-hist,限制为1,000行。另一方面,配置允许您增加bpython历史记录的默认限制,该历史记录单独存储在一个文件中。尽管如此,bpython还保留了上下文历史,根据您在代码中的位置产生不同的结果。尽管存在这些变化,但是用于访问历史的概念上相同的基本命令都得到了常规Python REPL和bpython的支持。

您可以通过连续敲击键盘上的箭头键来遍历历史。

每次一行代码,使用向上箭头回到过去,使用向下箭头向前移动。按Enter确认您的决定,并重复前面的指示之一。

了解有关bpython:一个具有类似ide功能的Python REPL

请注意,bpython的历史建议并不总是与它们的时间顺序相对应。相反,Bpython会消除在当前缩进级别上下文中没有意义的建议。

与标准的Python REPL相比,当你开始输入一行已经运行过的代码时,bpython也会考虑历史:

了解有关bpython:一个具有类似ide功能的Python REPL

Bpython一旦发现以匹配字符序列开头的历史条目,就会显示一个灰色的补全。通过按键盘上的右箭头,您可以接受建议并让它自动完成,也可以通过输入其他内容来拒绝它。

尽量不要切换上下文

人类不擅长多任务处理,而电脑擅长。当在一个环境中切换任务时,你的大脑必须首先保存每个任务的当前状态,然后再转到新任务,并从上一个任务中离开的地方继续。这会消耗时间和精力,增加出错的可能性,并降低生产率。您的工具应该限制上下文切换,因为程序员已经有很多事情要做了。

集成开发环境(ide)通过将不同的软件开发工具组合到单个程序中来解决这个问题。

bpython REPL的以下功能也为您提供了保持专注的方法:

  • 类型反射:在运行时查看对象,看看它们是由谁组成的。
  • 函数签名:查看函数和方法期望的参数。
  • 文档字符串:读取用户描述的类型和函数。
  • 源代码:查看所讨论对象的源代码。

您不再需要启动另一个程序来调查未知代码,并冒着忘记正在做什么的危险,因为这些知识正是您所需要的。我们现在将更详细地研究这些特性。

运行时类型分析

Python的代码建议在任何地方都有效。一种是Python中的点操作符(.),用于访问对象的成员。为了防止属性错误,通常需要事先知道类中声明的属性和方法的名称,或者参考相关文档或源代码。幸运的是,bpython支持运行时对象自省和属性过滤,而无需离开您的终端。

举例来说,假设您正在开发一个多线程应用程序,并且想不起线程中特定方法或属性的具体名称。在这种情况下,你可以使用bpython:

了解有关bpython:一个具有类似ide功能的Python REPL

解释:请记住,默认情况下,只显示可公开访问的成员,因为通常不应该更改对象的内部实现。在极少数情况下,您可能希望访问或更改其内部结构。要在bpython中显示此类私有成员,请在点操作符后输入一个或多个下划线字符(_)。

由于Python支持操作符重载,因此许多以双下划线开头的成员都是特殊方法。

Python标准库、使用pip安装的其他库以及项目文件夹中的自定义模块都是REPL知道可以在当前会话中导入的模块的示例。在导入Python模块和包之前,您还可以使用bpython的推荐来探索它们。输入import、空格和至少一个字符后按Tab键显示以下建议:

了解有关bpython:一个具有类似ide功能的Python REPL

bpython中的内部模块不会显示为建议,除非您使用前导下划线或双下划线要求它们,类似于检查对象属性。导入特定模块后,可以使用相同的点操作符查看其内容。

文档字符串和函数签名

函数签名、形式参数及其默认值在bpython中显示,当您键入一个左括号来调用函数或方法时。此外,它将声明参数是位置型、纯位置型、纯关键字型还是纯关键字型

了解有关bpython:一个具有类似ide功能的Python REPL

解释:bpython的惊人特性是显示函数签名的能力。调用函数时,Python会在函数签名中突出显示当前参数的名称,以显示仍需要多少参数作为输入值。如果函数需要多个参数,这将非常有用。

遗憾的是,尽管存在于源代码中,但没有显示参数的类型或函数的返回值,因为该特性不支持类型提示。此外,您将看到一些可调用对象(如complex())不会调用相应的bpython函数签名。Bpython可能会遇到这些问题,因为它们经常被实现为具有特殊方法的类,这些方法使它们看起来和行为像函数。

函数签名已经包含了大量有用的细节,可以帮助您在不查阅其文档的情况下理解函数或方法的目的。您的sub()函数和Python的内置max()函数在上面的示例中都有文档字符串,bpython将其显示出来。但是,如果bpython可以从源代码中找到并提取一个文档字符串,那么它就会从函数体中显示一个文档字符串。

docstring是一个多行字符串字面值,紧跟在函数签名之后,以人类可读的语言描述函数,可能偶尔会提供关于函数参数的详细信息,或者作为函数自检和使用示例的自动文档测试。自动显示文档字符串比访问函数更有效。__ doc__属性或Python内置的help()函数。

如果函数签名或文档字符串对您来说还不够,您可以使用bpython来显示底层源代码。

源代码预览

现代代码编辑器使您能够通过单击符号并按住特定键盘键来导航到符号的定义。Python标准库、项目中定义的符号或使用pip安装的第三方包都受此影响。通过在bpython中输入某个符号后按F2,您可以获得相关源代码的只读预览:

了解有关bpython:一个具有类似ide功能的Python REPL

解释:可以键入模块、函数或类的名称。根据符号的类型,您将只看到与该特定作用域关联的源代码。有趣的是,您可以在REPL会话中请求之前定义的类和函数的源代码。

当单击源代码预览时,操作系统的默认终端寻呼机程序(通常是Unix less命令)将打开。用方向键上下滚动,向上和向下翻页,或按Q键结束当前页面。

您还可以使用正斜杠(/)进行搜索,使用N表示下一项,或使用P表示前一项。

无论您是使用bpython还是代码编辑器,只要可以访问纯python源代码,此特性就会起作用。另一方面,如果符号是内置函数,或者是作为C编程语言的扩展模块创建的,那么您将无法了解它。相反,bpython将指出它无法定位任何源代码。

更迅速地纠正错误

标准Python REPL的另一个不足之处是编辑代码的能力。您会经常发现自己重复键入同一行代码,因为嵌套块中的错误很难在不从头开始的情况下纠正。

即使使用了bpython的智能代码建议和自动完成功能,在编写代码或决定不使用特定实现时,您也可能偶尔会犯错误。bpython REPL的许多有用的特性使编辑和重新评估代码变得简单,使您能够:

  • 倒写一行或多行
  • 使用外部编辑器编辑代码。
  • 再次导入模块

向后一行或多行

在使用标准Python REPL时,如果在代码块中间出错,则必须重新开始并重新键入整个代码块。在bpython中,你可以使用Ctrl+R撤销最近几行中的一行,并通过按组合键添加新的行:

了解有关bpython:一个具有类似ide功能的Python REPL

解释:请注意,每当您返回一行代码(包括先前执行的未编辑的行)时,bpython都会从头开始运行整个REPL会话。因此,在更改外部状态之前,例如在写入文件、数据库或网络连接时,需要格外小心地考虑任何不利影响。

倒带是纠正你立即意识到的错误的好方法,但对于纠正早期的错误或进行重大更改并不理想。Bpython对此有一个额外的解决方案。

使用外部编辑器编辑代码

您可以使用外部代码编辑器通过按键盘快捷键Ctrl+X来添加或更改bpython REPL中的代码。

了解有关bpython:一个具有类似ide功能的Python REPL

解释:如果要定义一个新函数或整个类,可以在使用编辑器时添加多行代码。在选择编辑的行中可能已经存在Python指令,在这种情况下,bpython将在将其加载到外部编辑器之前将其保存到临时文件中。编辑完成后请保存文件,然后退出编辑器返回bpython。

当您关闭编辑器时,bpython REPL将知道。然后,就像之前的倒带特性一样,它会将更新后的代码从临时文件注入到活动会话中,并重新评估它。

除了编辑一行或一小段代码外,还可以在bpython中编辑整个REPL会话。要在编辑器中启动当前会话,按F7:

了解有关bpython:一个具有类似ide功能的Python REPL

这一次,您将看到REPL会话中的所有内容,包括来自前面说明的注释。它们不会被考虑,因为当您关闭编辑器时,bpython最终会重新评估您的会话。

重新加载导入的模块

使用bpython,您可以使用任何代码编辑器来更改本地模块或包中包含的helper函数和类,并在当前REPL会话中立即重新加载这些更改。更改一些导入的代码是测试和调试代码而无需重启bpython的好方法。

在bpython中按F6将修改后的模块保存在代码编辑器中后重新加载,然后评估自启动REPL以来的整个会话:

了解有关bpython:一个具有类似ide功能的Python REPL

解释:该函数是探索性测试的关键资源。重新加载模块更新输出,同时保持当前REPL会话指令的完整性。他们减少了关闭、启动Python和重复输入相同指令所花费的时间,这可以提高工作效率。

此外,bpython REPL支持自动模块重新加载,使您不必每次在外部编辑器中更改代码时手动按下按钮。

请记住,当您手动重新加载模块或让bpython自动为您执行此操作时,将重新评估整个会话。在bpython中,按F5以启用自动加载功能:

它将跟踪您导入的模块和包,并在每次保存其中一个文件时在当前打开的REPL会话中自动重新加载它们。它可以节省您的时间,并大大改善手动模块重新加载。你可以再按一次F5来关闭自动加载功能。

正如您所看到的,bpython提供了默认Python REPL所缺乏的几个代码编辑功能,使修复错误和重构代码变得更加简单。然而,Bpython比这更通用!如果您是一名教师,您将重视导出REPL会话并以几种直接的方式与他人共享它的能力。

共享您的REPL会话

您可以使用bpython REPL作为一个很好的教学工具来演示一个想法,然后在课堂上向您的同事或学生展示生成的代码片段。一旦你用bpython写完一些东西,你可以将它保存在一个文件中,在线共享,或者将整个REPL会话和所有输出复制到剪贴板。

剪贴板复制

只需按一下键,您就可以将REPL会话的内容复制到剪贴板,这对于传递代码片段或将它们粘贴到Stack Overflow中非常有用。但请记住,在bpython中,复制到剪贴板的功能在默认情况下是禁用的。在启用pyperclip库以便bpython可以导入它之前,必须将它安装到虚拟环境中。

安装之后,启动REPL会话的默认快捷方式是F10。这是为其他人提供工作代码示例的好方法,特别是如果您想包含代码的结果。复制时语法着色将丢失,因此将其粘贴到python兼容的应用程序中以恢复颜色。

除了手动将代码粘贴到消息应用程序或文本编辑器中,您还可以将当前REPL会话直接保存到计算机上的本地文件中。

保存文件

将bpython REPL会话保存到文件的标准快捷键是众所周知的Ctrl+S组合键,大多数Windows PC程序都将其用于此目的:

了解有关bpython:一个具有类似ide功能的Python REPL

它将提示您输入要在当前工作目录中创建的文件的名称,或者输入要保存该文件的完整路径。如果文件已经存在,您将获得覆盖、添加或取消操作的选项。

Ctrl+S组合键是Unix shell上的一个标准热键,用于停止程序的输出。重写bpython的默认动作会发送一个唯一的XOFF代码来停止通过终端的数据传输。

您可以在终端会话中输入以下命令来删除这个过时的软件流控制:

将bpython代码保存到文件的好处是,删除了REPL提示符,例如三重chevron(>>>)或省略号(…),使代码更容易执行。如果您想与其他人共享代码,您仍然必须将该文件作为附件发送。在这种情况下,将您的REPL会话发送到Pastebin会很有帮助。

送到Pastebin

用bpython编程语言共享代码的第三种方法是将您的REPL会话上传到pastebin或其他在线文本存储服务。bpython REPL支持的默认pastebin服务是bpa。这是一个pinnaward实例,但如果你愿意,你可以将它更改为另一个服务。稍等片刻,按F8并按Y确认后,会显示一个可共享的URL:

了解有关bpython:一个具有类似ide功能的Python REPL

键盘快捷键

键盘上链接到特定操作的快捷键,如清除屏幕或显示源代码预览。使用以下语法定义唯一键绑定:

生成的配置文件包括已注释掉的操作及其默认键盘快捷键的映射。其中一些可以更新和取消注释。您可以将保存动作的快捷键重新映射为F4,以避免与广泛使用的暂停终端的全局热键冲突,例如:

保存配置文件后,请记住重新启动bpython以使更改生效。当bpython启动时,配置文件只被读取一次。

发现bpython的怪癖

像任何软件一样,bpython也有它的缺点。最大的问题可能是它需要一些调整才能在Windows上运行。由于它依赖于curses库,因此不能将其作为本机Windows应用程序(WSL)运行。使用Linux的Windows子系统安装Python是最好的选择。

当您第一次接触它们时,标准Python REPL和bpython之间在表示和行为上的细微差异可能会让您感到惊讶。例如,回溯看起来略有不同。当代码被粘贴到bpython中时,REPL可能会冻结,直到整个代码运行完毕。打印特定的ANSI转义码也会导致bpython崩溃。

最后但并非最不重要的是,尽管有很长的历史,bpython还没有达到1.0版本。这表明该项目仍在不断变化,并对激进的修改持开放态度。但是由于bpython目前非常完善和值得信赖,所以情况似乎并非如此。

参与bpython

麻省理工学院许可的开源bpython REPL的源代码保存在GitHub上。任何人都可以通过各种方式为bpython做出贡献,例如修复错误、增强文档、添加翻译或建议新功能。

如果您想留下自己的印记,请查看bpython项目的open bitsize标记GitHub问题。它们应该特别适合开始使用,并且可以帮助您熟悉代码库。

首先,将bpython项目克隆到您的计算机上,并在GitHub上使用您的名字进行分叉。然后,在可编辑模式下安装带有必要依赖项的bpython副本,并使用Python 3.7或更高版本为克隆项目创建并激活虚拟环境:

尝试使用setup.py而不是pyproject安装Python包的过时方法。如果你在安装bpython时遇到问题:

因此,应该将必要的依赖项添加到活动虚拟环境中。您可以选择手动安装开发或启用额外功能所需的任何附加依赖项。

bpython的源代码目前是可编辑的。例如,当您启动bpython时,Python版本的横幅将显示在屏幕顶部。现在在你喜欢的代码编辑器中打开args.py模块:

当您运行该模块时,这样的更改将立即在虚拟环境中可见,因为您以可编辑模式安装了bpython。试一试!你将看到类似这样的内容:

你可以随意修改bpython的REPL。当您对您的修改感到满意时,打开对原始存储库的拉取请求,并准备贡献回来。不错吧?

结论

做得好!现在,任何Python解释器都可以在其上添加bpython REPL,从而允许您更改其设置并利用其所有类似ide的功能。也许从现在开始,您将使用bpython作为默认的Python REPL!您可以满意地反思关于bpython的所有知识,以及它如何比默认的Python REPL执行得更好。

学习一种新工具有时会令人生畏。但是,如果您投入时间来习惯bpython,那么您将获得强大的功能并提高您作为Python程序员的生产力。







Youtube 视频加入我们的Youtube频道:现在加入

反馈


帮助别人,请分享

脸谱网 推特 pinterest

学习最新教程


准备


热门的技术


b .技术/马华






Baidu
map