Python(2.7)的交互式shell是否具有等同于bash" !!" (嘭嘭)?

时间:2018-03-22 17:44:18

标签: python read-eval-print-loop

当我想引用该shell中执行的最后一个命令时,我常常在bash中键入!!

$ 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(!!) 

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

4 个答案:

答案 0 :(得分:3)

在Python shell中计算的最后一个表达式的值可以eos获得,即单个下划线。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

使用默认的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)

答案 3 :(得分:0)

向上箭头/返回!只要您的口译员使用readline支持编译。

相关问题