Python: expression vs statement

30-Wrz-2020

Podstawowa różnica między statement, a expression bierze sie z definicji tych obiektów:

– statement – coś robi i niekoniecznie cokolwiek zwraca. Przykładem statement jest pass i przypisanie wartości do zmiennych

– expression – to jest jedna lub więcej instrukcji, które coś zwracają. Przykładem expression jest np dowolny napis, dowolne obliczenie, ale też np. polecenie print (!!!)

Rozważmy taki kod:

Jak sprawdzić czy coś jest expression? Prosto. Do zmiennej przypisz wynik wykonania polecenia, np.:

zwracany wynik to

Widać więc, że print (chociaż głównie kojarzy nam się z robieniem czegoś – wyświetlaniem napisu) jest też expression, bo ma wartość None.

Trochę inaczej jest tu:

oto wynik:

Niestety – pass tylko coś robi (dokładniej rzecz biorąc „robi nic”), kompletnie nic nie zwraca, nawet None (!!!!)

Podobnie jest z przypisaniem:

też błąd:

Przypisanie się wykonuje, ale podobnie jak poprzednio kompletnie nic nie zwraca.

No i po tym wstępie mogę tłumaczyć dlaczego nie zadziałało if 🙂

Wyrażenie if zapisane w postaci jednolinijkowca musi być wyrażeniem. Pierwsze polecenie:

nie jest wyrażeniem, bo o ile jeszcze print coś zwraca (None), o tyle druga część z przypisaniem nic nie zwraca. Stąd błąd

Podobnie będzie tu:

Ale za to tutaj już tego problemu nie ma, bo tu zawsze uzyskasz wyrażenie:

Co ciekawe, jeśli wynik tego wyrażenia chcesz zapisać w zmiennej:

to okaże się, że jej wartość to None:

Więcej na ten temat można poczytać też tu (j.ang):

https://stackoverflow.com/questions/16114003/error-when-trying-to-use-pass-keyword-in-one-line-if-statement

Mam nadzieję, że udało mi się rozwiać wątpliwości!

Dodaj komentarz:

Autor: Rafał Kraik