【问题标题】:How to run a function each time I hit enter in the Python shell每次我在 Python shell 中按回车键时如何运行函数
【发布时间】:2016-01-19 10:06:38
【问题描述】:

我有时会在交互式 shell 中编写小函数。

它们很少第一次是正确的,所以我花了很多时间在同一个测试集上运行我的函数版本来验证正确性。

>>> def test_foo():
        print( foo(4) == 5 )
        print( foo(8) == 9 )
>>> def foo(x): return x + 1
>>> test_foo()
True
True

但是foo 可能更复杂,我可能需要 5 次或更多次重写才能让它通过我的测试,因为手动运行套件很无聊,我需要这样的东西:

>>> def test_foo():
        print( foo(4) == 5 )
        print( foo(8) == 9 )
>>> :SET_ON_EXECUTION test_foo

现在每次我重写我的 foo 函数并将其发送到定义时,测试也将运行。

一些研究

  • 在 Google 上搜索没有给出有用的答案。
  • 在 shell 中 python -h 没有告诉我如何执行此操作。
  • %quickref'ipython 中也没有,`.

【问题讨论】:

  • 您介意按几次向上箭头,还是按 Control-R 后跟几个字符,然后按 Tab 键并输入?
  • 或者,您可以快速分配f = test_foo,这样可以节省大约 8 个字符。现在它只是提示符处的f()
  • @Evert 这就是我目前正在做的,自动化会非常好
  • Jupyter(网络)笔记本中的一个单元格只是(我认为)alt-enter 来执行当前单元格的问题。编辑单元格,alt-enter,编辑,alt-enter 等。这是我能想到的最接近的。可能有一些 IDE 具有类似的行为。

标签: python automated-tests read-eval-print-loop


【解决方案1】:

我强烈建议为此使用Jupyter notebooks(以前称为 IPython)。它允许您创建一个包含代码的“单元格”,您可以使用Ctrl-Enter 组合键重新执行该代码。

例如,在您的情况下,您可以将函数定义和执行放在同一个单元格中,然后在您编辑时轻松地重新执行它。

通过这种方式,您可以逐步构建代码,一次修复和开发一个函数。

由于您已经安装了 IPython,您应该能够启动并运行:

$ pip install jupyter
$ jupyter notebook

它将在您的浏览器中启动。通过单击右上角的“新建”并选择“笔记本”下的一个 Python 内核来创建一个新笔记本。

【讨论】:

    【解决方案2】:

    您可以在编辑器中编辑代码并使用文件观察器在终端中运行测试,从而在每次保存代码或测试文件时运行测试。

    有关如何在文件更改时运行命令(文件观察器)的信息,请参阅此问题的答案:https://superuser.com/questions/181517/how-to-execute-a-command-whenever-a-file-changes

    【讨论】:

    • 您能否提供更多提示?您是指将屏幕一分为二,并将代码保存在一个文件中,而将测试保存在另一个文件中?这不是和doctest 相似,只是不那么友好吗?
    • 我的意思是在屏幕上同时打开一个编辑器和一个终端。在编辑器中,您将编辑您的代码或您的测试。在终端中,您将设置一个文件观察器,只要测试文件或代码文件发生更改,它就会运行您的测试。您使用的是什么操作系统?每个操作系统都有自己的文件查看技术。
    • 有趣,我用的是 Ubuntu 15.04
    【解决方案3】:

    由于您使用的是ipython,您只需创建一个包含要在启动时运行的代码的whatever.py 文件,然后通过ipython whatever.py 运行ipython

    您也可以通过modifying your ~/.ipython/ipy_user_conf.py运行Python代码:

    您的~/.ipython 目录中应该有一个简单的模板ipy_user_conf.py 文件。它是一个在 IPython 启动期间导入的普通 python 模块,因此您可以在那里做几乎所有您想做的事情 - 导入模块、配置扩展、更改选项、定义魔术命令、将变量和函数放入 IPython 命名空间等。您使用IPython 扩展 api 对象,由IPython.ipapi.get() 获取并记录在“IPython 扩展 API”一章中,用于与 IPython 交互。

    您也可以将a file called ipythonrc 放在您当前的工作目录中:

    正如我们已经提到的,IPython 读取一个配置文件,该文件可以在命令行中指定 (-rcfile),或者默认情况下假定为 ipythonrc。在启动 IPython 的当前目录中查找此类文件,然后在您的 IPYTHONDIR 中查找,这允许您拥有特定项目的本地配置文件。在本节中,我们将这些类型的配置文件简称为rcfiles(资源配置文件的简称)。

    执行:给出任何要执行的单行python代码。

    execfile :执行execfile(filename) 命令给出的python 文件。对给定名称执行用户名扩展。因此,如果您需要任何不适合上述任何“固定”选项的额外花哨定制,您可以将其放入单独的 python 文件并执行它。

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 1970-01-01
      • 2016-11-10
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2019-03-21
      相关资源
      最近更新 更多