/ / Czy interaktywna powłoka Pythona (2.7) ma odpowiednik basha "!!" (bang bang)? - python, read-eval-print-loop

Czy interaktywna powłoka Pythona (2.7) ma odpowiednik basha "!!" (bang bang)? - python, read-eval-print-loop

Jestem przyzwyczajony do pisania !! w bashu, gdy chcę odwołać się do ostatniego polecenia wykonanego w tej powłoce.

$ 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

Czy istnieje sposób to zrobić w python?

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

Byłoby to bardzo przydatne jako tłumaczkomendy stają się coraz bardziej skomplikowane. Pewnie, mógłbym użyć mnóstwa zmiennych lokalnych - ale czasami jest to przydatne, aby wywołać ostatnie działanie ...

Odpowiedzi:

3 dla odpowiedzi № 1

Wartość ostatniego wyrażenia ocenianego w powłoce Python jest dostępna jako _, czyli pojedyncze podkreślenie.


3 dla odpowiedzi № 2

Możesz użyć _ znak, aby odnieść się do ostatniej obliczonej wartości i użyć jej w innych obliczeniach:

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

0 dla odpowiedzi № 3

Korzystanie z domyślnych powiązań Readline, Kontrola-P + Wchodzić jest prawdopodobnie najbliższym dokładnym odpowiednikiem !!; pierwszy klucz pobiera poprzednie polecenie; drugi wykonuje to. Prawdopodobnie możesz dodać niestandardowe powiązanie do .inputrc wykonać obie funkcje jednym naciśnięciem klawisza. Należy jednak zauważyć, że jest to całkowicie liniowe; jeśli spróbujesz użyć tego wieloliniowego for oświadczenie, na przykład, dostaniesz tylko ostatnią linię ciała, a nie całą for komunikat.

The _ variable przechowuje wynik ostatniego obliczonego wyrażenia; nie jest to jednak w żaden sposób sprawdzone, co widać najwyraźniej 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)

0 dla odpowiedzi nr 4

Strzałka w górę / powrót! Tak długo jak twój tłumacz był skompilowany readline wsparcie.