Podczas bawiących się z pythonem w terminalu zauważyłem coś dziwnego. Jeśli wpiszesz wyrażenie, taki jak 1+2*3, terminal wyjdzie 7, co jest dziwne, ponieważ nie powinno nic drukować, ale tak. Ale jeśli użyjesz funkcji, takiej jak Drukowanie ("Witaj świecie"), wyjdziemy hello world, a nie None, co powraca drukowania. Również, wpisując True wyjścia True i False wyjścia False, ale wpisanie None niczego nie wysyła. W jaki sposób Python decyduje się, kiedy wysyła wartość?

2
dangee1705 24 czerwiec 2017, 21:14

3 odpowiedzi

Najlepsza odpowiedź

To, co widzisz, jest Report Python (pętla do oceny odczytu).

Większość odsłon (w tym Repon Pythona) będzie korzystać z parsera online : parser, który buduje drzewo wyrażenie. Od momentu zbudowania drzewa wyrażającego, Rest będzie ocenić go (może to być defintowanie funkcji, w którym to przypadku funkcja jest analizowana i analizowana). Po dokonaniu oceny Repor zostanie uzyskiwany wynik, a sprawdź wynik * . Jeśli jest {x0}}, wynik nie jest drukowany . To samo dzieje się przy okazji z zadaniami.

Na przykład:

>>> None  # None is not printed
>>> a = 2 # assignments are not printed
>>> 

W przypadku, gdy wynik jest nie None, wówczas wywołanie metody wbudowanej {X1}}, a tym samym wydrukować reprezentację tekstową wyniku.

7
Willem Van Onsem 24 czerwiec 2017, 18:29

Sesja Pythona w terminalu jest znana jako REPT, LUB OCENA OCENA REVENUSION, która przyjmuje wkład, ocenia go i zwraca wynik. Sprawdź Wikipedia Strona.

3
rma 24 czerwiec 2017, 18:17

Dokładnie tak się stanie, gdy oceniasz wyrażenie, jest określony przez sys.displayhook. Z Dokumenty:

{x0}}

Jeśli value nie jest None, ta funkcja drukuje go do sys.stdout i zapisuje go w __builtin__._.

sys.displayhook jest wezwany na wynik oceny wyrażenia wprowadzonego w interaktywnej sesji Python. Wyświetlacz tych wartości można dostosować, przypisując kolejną funkcję jednego argumentu do sys.displayhook.

Przykład prostego nadpisania, który odbiera specjalny przypadek None:

>>> def new_hook(x):
...   print(repr(x))
...   
>>> sys.displayhook = new_hook
>>> 3
3
>>> None
None
8
Community 20 czerwiec 2020, 09:12