为什么要使用Python交互模式?

22

当我第一次学习Python时,所有的教程都要求你使用Python的交互模式。对我来说,这种方式很难保存、编写长程序或编辑现有代码行。相比在code.py文件中打开解释器并直接运行,似乎更加困难。

python code.py

我来自Java背景,所以我有一种根深蒂固的写程序并编译文件的期望。我也知道如果一个特性在Python文档中没有明显用处的话,它就不会那么突出。那么我错过了什么呢?


如果你正在寻找更好的交互式 shell,那么你应该看看 dreampie(http://dreampie.sourceforge.net/)。它的缓冲系统和历史记录保存非常有用。 - sharvey
2
ipython 似乎是控制台模式 Shell 中最好的选择。我更喜欢它,而不是任何基于 GUI 的 Shell,包括 dreampie 在内的所有已尝试过的。当然,我可能会对控制台模式工具有偏见。我发现编写 doctest 文件是在需要反复运行长命令字符串并进行小改动的情况下更好的方法。但是,控制台很好,因为它可以记录您尝试的各种操作历史记录;如果将它们放在版本控制下,您也可以使用 doctests 来实现这一点,只不过不那么方便。 - intuited
IPython也有GUI,包括notebook和qtconsole。 - asmeurer
我严重怀疑99.999999%的开发人员没有使用(或实际上没有用处)任何非传统语言shell。我对jshell感到兴奋,认为我可以用jshell脚本替换bash脚本,但是缺乏基本功能使其成为12岁程序员的玩具而已。 - Sridhar Sarnobat
实际上这不仅仅是关于强类型。我也觉得jsc JavaScript shell没用(虽然node.js我无法评论)。 - Sridhar Sarnobat
10个回答

39

让我们来看看:

  • 如果你想知道某件事情是如何工作的,你可以尝试一下。没有必要写一个文件。我几乎总是在编码之前先在解释器中草写我的程序。这不仅适用于那些你不知道如何在编程语言中工作的东西。例如,我永远不记得使用 range 创建 [-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还使用解释器功能,因此您不仅可以在调试时查看变量是什么,而且还可以操纵甚至更改它而无需停止调试。

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

    评论者:我有遗漏吗?


    help()也可以通过pydoc命令行使用。而且,ipython使得Python在交互性方面接近Matlab(至少是Matlab的CLI)。即使你搞砸了一个循环,你也可以光标上移并修复它。有时我甚至会打开一个文本编辑器窗口,在其中编写一些命令,然后将其复制并粘贴到Python解释器中。数组索引出错?修复、复制和再次粘贴即可。无需将文件保存在任何地方。 - Mike DeSimone
    在iPython中添加一个选项,可以在编辑器中编辑代码片段,并将实验历史的(一部分)保存到文件中,该文件可以作为真正代码的基础。有机会进行实验可以提高生产力 - 传统的工作量估计方程式考虑往返时间 - 在控制台上,您几乎可以立即完成往返。 - Jan Vlcinsky
    我在IPython笔记本出现之前就写过这个,但是现在它是混合交互性、编辑、绘图等非终端特性以及保存东西以供以后使用的最佳方式。 - asmeurer
    import pprint 对于大型和复杂的字典、列表或其他从 JSON 中获取的结构来说是不可或缺的。 - Kevin
    在工作中,我们使用Python通过USB接口测试和调试电子硬件。使用python -i开关与用于设置测试的任何脚本相结合非常方便。执行完毕后,解释器会回到交互模式,可以在台式仪器上瞎弄时运行不同的测试子集。 - FriendFX

    13

    REPL循环(如Python的交互模式)为程序员提供即时反馈。因此,您可以快速编写和测试小型代码片段,并将这些片段组装成更大的程序。


    5
    您在谈论通过简单地输入“python”在控制台中运行Python吗?这只是用于小测试和练习语言。学习语言和测试其他模块时非常有用。当然,任何真正的软件项目都是在.py文件中编写,然后由解释器执行!

    2
    Python解释器是最通用的:它可以在多个平台上运行,并且表现相同(除了特定于平台的模块),因此很容易让新手入门。
    告诉新手启动解释器并“执行此操作”要比让他们打开文件、键入一些代码、保存文件、使其可执行、确保python在您的PATH中或使用#!线路等更加简单。放弃这一切,只需启动解释器。对于简单示例,没有什么比它更好的了。它从来不是长程序的首选,所以如果您使用它进行那样的操作,则可能错过了教程中告诉您“更长的脚本存储在文件中”的部分。 :)

    关于井叹号 (#!) 行:我现在只使用 #!/usr/bin/env python。它让 env 在用户的 $PATH 中查找 python - Mike DeSimone
    没错,但这样你就已经假定了一个*nix类似的平台,而教程最好不要做出这种假设。使用解释器意味着无论你在什么平台上,示例看起来都是一样的,作为教程作者,你不必创建两个版本的示例,或者写像“现在,如果你在Windows机器上,你需要……”这样的东西。在有很多例子的长教程中,这种事情可能会分散注意力。不过,记录一下,我只在*nix类似的平台上编码,除非我有理由这样做,否则我也使用'env'。 :) - jonesy

    2
    你可以使用交互式解释器来测试代码片段,以确保在将它们放入你的脚本之前它们能够正常运行。

    2
    正如已经提到的,Python交互式解释器提供了一种快速而简单的方式来测试简单的Python函数和/或代码片段。
    我个人使用Python shell作为执行简单数值运算(由math模块提供)的非常快速的方式。我已经设置好了我的环境,使得每当我启动Python shell时,math模块会自动导入。实际上,这是向非Python爱好者“推销”Python的好方法。向他们展示如何将Python用作一个整洁的科学计算器,并用于简单的数学原型设计。

    1
    我从来没有让 bc 成为一个好用的简单命令行计算器。Python 更好,而且比 Matlab 轻量级得多。 - Mike DeSimone
    +1 Mike。我实验室的同事们即使是简单的数值计算也主要使用MATLAB。每当有机会,我都会向他们介绍Python的交互模式和其数学模块。 - user59634

    2

    有一件事是我用交互模式做的,其他人没有提到:查看模块是否已安装。只需启动Python并尝试import模块即可;如果出错,则您的PYTHONPATH已损坏或未安装该模块。

    对于"嘿,它在我的计算机上无法运行"或"那个Python安装在哪里"的错误,这是一个很好的第一步。


    1

    我发现交互式解释器非常非常适合测试快速代码,或向他人展示Python的强大功能。有时我也将解释器用作方便的计算器。在很短的时间内你可以做出惊人的事情。

    除了内置控制台之外,我还要推荐Pyshell。它具有自动完成和良好的语法高亮功能。您还可以同时编辑多行代码。当然,它并不完美,但肯定比默认的Python控制台更好。


    1
    在使用Java编程时,你几乎总是会在某个浏览器窗口中打开API。然而,在Python解释器中,你可以随时导入任何你想使用的模块并检查它提供了什么。你还可以测试你不确定的新方法的行为,以消除“哦!原来是这样工作”的错误源。

    0

    交互模式使得在将代码片段加入到更大的程序之前进行测试变得容易。如果您使用IDLE,它会提供语法高亮和参数弹出窗口来帮助您。这也是一种快速检查您是否已经掌握了如何使用模块而无需编写测试程序的方法。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接