相当于 matlab "ans"和运行 shell 命令



这些天,在使用Matlab/Octave十多年后,我正在从Matlab过渡到Python。我有两个简短的问题:

  1. 在Python交互模式下,是否有对应于Matlab的ans的东西?
  2. 如何在Python交互模式下运行shell命令?当然,我可以使用os.system(),但在Matlab中,我们可以通过在实际命令之前放置!来运行shell命令。在Python中有类似的东西吗?

Python交互模式为Python。您将需要使用os.system或同等的工具。或者,您可以使用Ctrl-Z暂停Python,然后使用fg返回。(假设类unix环境)

最后求值的表达式保存在变量_中:

>>> 1 + 2
3
>>> _ * 4
12

Python等价的Matlab ans如下:

ans = (your_expression)

换句话说,最近的表达式并不总是自动保存到默认引用,所以只需像往常一样手动保存它。正如@Amadan所指出的,表达式有时被保存到_,但并非总是如此。对于可靠性和清晰度的最佳实践是自己保存它。

要运行shell命令,您可以按照建议使用os.system()。但是,这是不赞成的,所以您应该查看subprocess模块。

您可能希望使用IPython shell(现在是jupyeter项目的一部分)。在IPython shell中,您还可以使用!运行系统命令,尽管许多基本命令(如lscd)甚至不需要!就可以工作。与MATLAB不同,您不需要将其作为字符串传递(尽管您可以)。所以!ls在ippython中工作得很好,而在MATLAB中你需要做!'ls'。此外,您可以将结果分配给ippython中的变量,这在MATLAB中是无法做到的。所以a = !ls在ippython中工作,但在MATLAB中不行。此外,如果使用!!,结果将以易于在Python中使用的形式返回。因此,!!ls返回一个文件名列表。

IPython仍然使用_符号来获取先前的结果(除了,与Python一样,None被计数为"无结果",因此不被记录)。您还可以使用__获得倒数第二的结果,使用___获得倒数第三的结果。此外,IPython会在命令提示符的每行后面加上一个数字。要获得某一行的结果,只需执行_n,其中n是数字。因此,要获得第三个命令的结果,它旁边的数字是3,只需执行_3。如果结果是None,这仍然不起作用。

它有很多功能。您可以使用_i获得前一个输入(作为字符串)(依此类推,遵循与输出相同的模式)。您可以使用%timeit%%timeit进行时间编码。您可以在遇到错误后跳转到调试器。

最新更新