Mors w Pythonie – Szybki Strzał #1

Ten wpis inauguruję serię, która będzie skupiała się na pojedynczych, technicznych zagadnieniach konkretnego języka lub technologii. Na pierwszy ogień idzie Mors, który pojawił się w Pythonie 3.8.

Dlaczego te wyrażenie przypisujące zostało tak nazwane? Z poziomu koncepcyjnego wygląda to następująco:

a := b

Złożenie dwukropka i znaku równości przypomina Morsa, := wygląda jak para oczu i kłów. Taką operację nazywamy a walrus b (z angielskiego walrus oznacza mors). Mors znajduje zastosowanie w instrukcjach warunkowych.

Zobaczmy jak to wygląda na przykładach z życia wziętych. Załóżmy, że mamy strukturę danych w której trzymamy różne rodzaje testów oraz liczbę ich implementacji:

testy = {'jednostkowe': 10,
         'funkcjonalne': 5,
         'integracyjne': 2,
         'systemowe': 1}

W następnym kroku chcemy sprawdzić, czy przykładowo liczba testów funkcjonalnych jest większa niż 4. Przed Pythonem 3.8 wyglądałoby to tak:

liczba_testow_funkcjonalnych = testy.get('funkcjonalne', 0)
if liczba_testow_funkcjonalnych > 4:
    print('Hurra! Liczba testow jest wieksza od minimum.')
else:
    print('Ups! Brakuje testow.')

Powyższy kod można uprościć za pomocą Morsa:

if (liczba_testow_funkcjonalnych := testy.get('funkcjonalne', 0)) > 4: 
    print('Hurra! Liczba testow jest wieksza od minimum.') 
else: 
    print('Ups! Brakuje testow.')

Innym przykładem wykorzystania Morsa może być pętla while. Załóżmy, że zaimplementowaliśmy grę RPG, w której nasza postać walczy z potworami. Mamy pętlę, która wykonuje się dopóki poziom życia naszego bohatera nie spadnie poniżej pewnej wartości:

while poziom_zycia > 20:
    walcz_z_potworem()
    poziom_many = sprawdz_poziom_many()
    if poziom_many > 80:
        wykonaj_umiejetnosc_specjalna()
    poziom_zycia = sprawdz_poziom_zycia()

Z pomocą Morsa możemy powyższy kod przekształcić w następujący sposób:

while (poziom_zycia := sprawdz_poziom_zycia()) > 20:
    walcz_z_potworem()
    if (poziom_many := sprawdz_poziom_many()) > 80:
        wykonaj_umiejetnosc_specjalna()

Jak widać kod został zredukowany o dwie linijki. Przy większych projektach ta liczba może być zdecydowanie większa! Dzięki wyrażeniu przypisującemu jesteśmy w stanie zredukować wielkość naszych skryptów.

O czym trzeba pamiętać korzystając z Morsa?

Mors w Pythonie, podsumowanie:

  1. Mors jest wyrażeniem przypisującym wartość do zmiennej. Możemy go wykorzystać w instrukcjach warunkowych. Operację a :=b nazywamy a walrus b.
  2. Gdy wyrażenie przypisujące jest podwyrażeniem większego wyrażenia, musi ono być otoczone nawiasami.
  3. Dzięki wyrażeniu przypisującemu możemy emulować polecenia switch/case oraz do/while, które nie są dostępne w Pythonie.

To by było na tyle, daj znać czy Mors jest Ci znany? Czy używasz go w swoim kodzie? Zapraszam do dyskusji w komentarzach 🙂

 

ZAPISZ SIĘ DO NEWSLETTERA JUŻ TERAZ!
SPRAWDŹ CO DZIĘKI NIEMU ZYSKASZ