这些天,在使用Matlab/Octave十多年后,我正在从Matlab过渡到Python。我有两个简短的问题:
- 在Python交互模式下,是否有对应于Matlab的
ans
的东西? - 如何在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中,您还可以使用!
运行系统命令,尽管许多基本命令(如ls
或cd
)甚至不需要!
就可以工作。与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
进行时间编码。您可以在遇到错误后跳转到调试器。