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
当我想引用在该shell中执行的最后一个命令时,在bash中使用code>
$ 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分钟内都不能接受答案!