Python(2.7)和#x27;的交互式shell与bash';s"&引用;(砰砰)?

Python(2.7)和#x27;的交互式shell与bash';s"&引用;(砰砰)?,python,read-eval-print-loop,Python,Read Eval Print Loop,我习惯于打字 $ ls -la drwxr-xr-x 4 me wheel 136 Jan 19 2013 wireshark_stuff ... (etc) ... -rw-r--r-- 1 me wheel 11 Mar 13 13:51 old_PS1 $ !! |grep for_something_in_those_results ls -la |grep for_something_in_those_results /grep_re

我习惯于打字

$ ls -la  
drwxr-xr-x   4 me  wheel    136 Jan 19  2013 wireshark_stuff  
... (etc) ...  
-rw-r--r--   1 me  wheel     11 Mar 13 13:51 old_PS1  
$ !! |grep for_something_in_those_results  
ls -la |grep for_something_in_those_results  
/grep_results
在python中有没有实现这一点的方法

>>> complicated_dict.['long_key_name'][0]  
(response)  
>>> my_func(!!) 

随着解释器命令变得越来越复杂,这将变得非常方便。当然,我可以只使用过多的局部变量-但有时只调用最后运行的东西是很方便的…

Python shell中计算的最后一个表达式的值可用作
,即单个下划线。

您可以使用
字符引用最后计算的值,并在其他计算中使用:

>>> x = 5
>>> x + 10
15
>>> _
15
>>> _ + 2
17

使用默认的Readline绑定,Control-p+Enter可能是与
最接近的等价项;第一个键获取上一个命令;第二个执行它。您可能可以向
.inputrc
添加自定义绑定,以通过一次按键执行这两个函数。但请注意,这完全是面向行的;例如,如果您尝试在多行
for
语句之后使用此语句,您将只获得正文的最后一行,而不是整个
for
语句

变量存储上次计算表达式的结果;不过,它没有重新评估。这一点可以通过类似于
datetime.datetime.now
的内容最清楚地看到:

>>> datetime.datetime.now()
datetime.datetime(2018, 3, 22, 14, 14, 50, 360944)
>>> datetime.datetime.now()
datetime.datetime(2018, 3, 22, 14, 14, 51, 665947)
>>> _
datetime.datetime(2018, 3, 22, 14, 14, 51, 665947)
>>> _
datetime.datetime(2018, 3, 22, 14, 14, 51, 665947)
>>> _
datetime.datetime(2018, 3, 22, 14, 14, 51, 665947)
>>> datetime.datetime.now()
datetime.datetime(2018, 3, 22, 14, 14, 58, 404816)

向上箭头/返回!只要您的解释器是使用
readline
支持编译的

下划线在shell中工作就是为了这个目的。天哪,你们这些人速度很快。不过下划线不能执行任何操作;它只是一个绑定到上一个表达式值的变量。@poke;答案肯定是一样的,但参考的潜在dupe指的是Matlab/Mathematica。我建议将此内容留在这里,以便将像我这样熟悉bash的用户发送到那里的公认答案。(我也会接受这里的第一个答案,当我能够的时候,我会在下面对其进行评论。)@chepner很高兴知道,因为bash(我相信)实际上评估了
到最后执行的命令的内容。一个很好的细微差别来理解-谢谢。神圣的烟你们人很快。我甚至在12分钟内都不能接受答案!