【问题标题】:Why use Python interactive mode?为什么要使用 Python 交互模式?
【发布时间】:2010-04-19 01:39:15
【问题描述】:

当我第一次开始阅读 Python 时,所有的教程都让你使用 Python 的交互模式。很难保存、编写长程序或编辑现有的行(至少对我而言)。编写 Python 代码似乎比打开 code.py 文件并在该文件上运行解释器要困难得多。

python code.py

我来自 Java 背景,因此我对为程序编写和编译文件有着根深蒂固的期望。我也知道,如果某个功能在某种程度上没有用,那么它在 Python 文档中就不会那么突出。那我错过了什么?

【问题讨论】:

  • 如果你正在寻找更好的交互式shell,你应该看看dreampie (dreampie.sourceforge.net)。缓冲系统和历史保存非常有用。
  • ipython 似乎是最好的控制台模式 shell。与我尝试过的任何基于 GUI 的程序相比,我更喜欢它,包括 dreampie。当然,我可能偏向于控制台模式工具。我确实发现编辑 doctest 文件是在需要重复运行长字符串的情况下解决问题的更好方法,并且需要进行一些小的更改。但是控制台很好,因为它为您提供了您尝试过的各种事情的历史;如果您将它们置于修订控制之下,则使用 doctests 可能会不太方便。
  • IPython 有一个 GUI 以及 notebook 和 qtconsole。
  • 我严重怀疑 99.999999% 的开发人员使用(或在现实中有用)任何非传统语言外壳。我对 jshell 感到很兴奋,认为我可以用 jshell 脚本替换 bash 脚本,但缺乏基本功能使其对于 12 岁的程序员来说只不过是一个玩具。
  • 事实上这不仅仅是强类型。我也发现 jsc JavaScript shell 没用(虽然我不能说 node.js)

标签: python interactive-mode python-interactive


【解决方案1】:

让我们看看:

  • 如果您想知道某件事的工作原理,您可以尝试一下。无需编写文件。我几乎总是在编写程序之前先在解释器中编写程序。这不仅仅是因为你不知道它们在编程语言中是如何工作的。我不记得创建范围的正确参数是什么,例如 [-2, -1, 0, 1]。我不需要。我只需要启动解释器并尝试一些东西,直到我发现它是range(-2, 2)(实际上是刚刚做到的)。

  • 您可以将其用作计算器。

  • Python 是一种非常内省的编程语言。如果你想知道关于一个对象的任何事情,你可以做dir(object)。如果您使用 IPython,您甚至可以使用 object.<TAB>,它会使用制表符完成该对象的方法和属性。这比在文档甚至代码中查找内容要快得多。

  • help(anything) 用于文档。它比任何网络界面都快。

  • 同样,您必须使用 IPython(强烈推荐),但您可以计时。 %timeit func1()%timeit func2() 是一个常见的习惯用法,用于确定什么是更快的。

  • 您希望编写一个程序使用一次,然后再也不会使用的频率。最快的方法是在 Python 解释器中进行。当然,你必须小心编写循环或函数(它们必须在第一次使用正确的语法),但大多数东西都是一行一行的,你可以玩弄它。

  • 调试。当您在解释器中编写代码时,您无需将选择性打印语句放入代码中即可查看变量是什么。您只需输入>>> a,它就会显示a 是什么。很高兴再次看到您是否正确构建了某些东西。构建 Python 调试器 pdb 还使用了 intrepeter 功能,因此您不仅可以在调试时查看变量是什么,还可以在不停止调试的情况下操作甚至更改它。

当人们说 Python 开发速度更快时,我保证这是他们谈论的重要内容。

评论者:我忘记了什么?

【讨论】:

  • help() 也可以通过pydoc 从命令行获得。而ipython 使 Python 在交互性方面接近于 Matlab(至少是 Matlab 的 CLI)。即使你搞砸了一个循环,你也可以将光标向上移动并修复它。有时我什至会打开一个文本编辑器窗口,在其中编写一些命令,然后将其复制并粘贴到 Python 解释器中。破坏数组索引?修复,复制并再次粘贴。无需将文件保存在任何地方。
  • 添加一个选项(在 iPython 中)以在编辑器中编辑代码 sn-ps,并将您的实验历史(部分)保存到文件中,然后可以作为实际代码的基础。有机会进行实验可以提高生产力 - 用于估算工作量的经典方程确实依赖于往返时间 - 在控制台上,您几乎可以立即结束这一轮。
  • 我在 IPython notebook 之前写了这篇文章,但现在,它是混合交互性、编辑、绘图等非终端功能以及保存以供以后使用的能力的最佳方式。
  • import pprint 对于大型复杂的字典/列表/other-things-we-stole-from-JSON 结构是必不可少的。
  • 在工作中我们使用 Python 通过 USB 接口来测试和调试电子硬件。最好将python -i 开关与用于设置测试的任何脚本结合使用。执行后,解释器会返回到交互模式,然后可用于运行不同的测试子集,在工作台上摆弄示波器和其他测试设备。
【解决方案2】:

REPL Loops(类似于 Python 的交互模式)向程序员提供即时反馈。因此,您可以快速编写和测试小段代码,并将这些小段组装成一个更大的程序。

【讨论】:

    【解决方案3】:

    您说的是通过简单地输入“python”在控制台中运行 Python?那只是为了小测试和练习语言。在学习语言和测试其他模块时非常有用。

    当然,任何真正的软件项目都是用 .py 文件编写的,然后由解释器执行!

    【讨论】:

      【解决方案4】:

      Python 解释器是一个最小的共同点:您可以在多个平台上运行它,并且它的行为方式相同(模平台特定模块),因此很容易让新手使用。

      告诉新手启动解释器并“执行此操作”比让他们打开文件、输入一些代码、保存它、使其可执行、确保 python 在您的 PATH 中或使用一种 #!行等。废弃所有这些,然后启动解释器。对于简单的示例,您无法击败它。它从来不是用于长程序的,所以如果你用它来做这个,你可能错过了教程中告诉你“更长的脚本放在一个文件中”的部分。 :)

      【讨论】:

      • 关于 pound-bang (#!) 行:这些天我只使用 #!/usr/bin/env python。它使env 在用户的$PATH 上找到python
      • 是的,但是您已经假设了一个类似 *nix 的平台,理想情况下,教程不会做出这种假设。使用解释器只是意味着无论您在哪个平台上,示例看起来都是一样的,并且作为教程作者,您不必创建示例的两个版本,或者编写诸如“现在,如果你”重新在 Windows 机器上,你需要...."。在包含大量示例的长教程中,这种事情真的会让人分心。不过,为了记录,我只在*nix-like平台上编码,除非我有理由这样做,否则我也使用'env'。 :)
      【解决方案5】:

      在将代码放入脚本之前,您可以使用交互式解释器测试代码的 sn-ps。

      【讨论】:

        【解决方案6】:

        我发现交互式解释器非常非常适合测试快速代码或向他人展示 Python 的力量。有时我也将解释器用作方便的计算器。您可以在很短的时间内完成这项工作真是太棒了。

        除了内置控制台,我也不得不推荐Pyshell。它具有自动完成功能和不错的语法突出显示功能。您还可以一次编辑多行代码。当然,它并不完美,但肯定比默认的 python 控制台好。

        【讨论】:

          【解决方案7】:

          如前所述,Python 交互式解释器提供了一种快速而肮脏的方法来测试简单的 Python 函数和/或代码 sn-ps。

          我个人使用 Python shell 作为一种非常快速的方式来执行简单的数值运算(由math 模块提供)。我有我的环境设置,因此每当我启动 Python shell 时都会自动导入数学模块。事实上,这是向非 Python 爱好者“推销” Python 的好方法。向他们展示如何将 Python 用作一个简洁的科学计算器,以及如何进行简单的数学原型设计。

          【讨论】:

          • 从未bc 成为一个漂亮、简单的命令行计算器。 Python 要好得多,而且比 Matlab 轻得多。
          • +1 迈克。我实验室的人主要使用 MATLAB,即使是简单的数值任务也是如此。我尽量告诉他们 Python 的交互模式及其数学模块。
          【解决方案8】:

          我使用交互模式的一件事是其他人没有提到的:查看是否安装了模块。只需启动 Python 并尝试import 模块;如果它死了,那么您的 PYTHONPATH 已损坏或未安装该模块。

          这是解决“嘿,它在我的机器上无法运行”或“无论如何安装了哪个 Python”错误的第一步。

          【讨论】:

            【解决方案9】:

            使用 Java 编码时,您几乎总是会在某个浏览器窗口中打开 API。但是,使用 python 解释器,您始终可以导入您正在考虑使用的任何模块并检查它提供的内容。您还可以测试您不确定的新方法的行为,以消除“哦!原来是这样”作为错误来源的。

            【讨论】:

              【解决方案10】:

              交互模式可以在将代码合并到更大的程序之前轻松测试代码 sn-ps。如果您使用 IDLE,则会有语法高亮和参数弹出窗口来帮助您。这也是一种快速检查您是否已了解如何使用模块而无需编写测试程序的方法。

              【讨论】:

                猜你喜欢
                • 2021-02-10
                • 2017-06-05
                • 2019-10-27
                • 1970-01-01
                • 1970-01-01
                • 2023-02-05
                • 2020-11-28
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多