jesteś tutaj�
117
Dane strukturalne
obiekt
obiekt
obiekt
obiekt
klucz nr 1
klucz nr 2
klucz nr 3
klucz nr 4
Słownik
10
fruits
jabłka
Sprawdzanie przynależności za pomocą operatora in
Do słownika
fruits
dodajmy jeszcze jeden wiersz danych — z kluczem
banany
— i zobaczmy,
co się stanie. Jednak zamiast prostego przypisania (z którego korzystaliśmy w przypadku wiersza
zawierającego klucz
jabłka
) zastosujmy tym razem inkrementację wartości związanej z kluczem
banany
, jeśli klucz ten już istnieje w słowniku
fruits
, a jeśli nie istnieje, zainicjalizujmy tę daną
wartością
1
. To bardzo typowa operacja, zwłaszcza w przypadku zliczania liczby wystąpień za pomocą
słownika, a zastosowany tu sposób powinien nam pomóc uniknąć wystąpienia wyjątku
KeyError
.
>>> if ‘banany’ in fruits:
fruits[‘banany’] += 1
else:
fruits[‘banany’] = 1
>>> fruits
{‘jabłka’: 10, ‘banany’: 1}
Ustawiliśmy wartość związaną
z kluczem ‘banany’ na 1.
jabłka
10
fruits
Stan po wykonaniu
kodu dotyczącego
bananów
banany
1
Stan przed wykonaniem kodu
dotyczącego bananów
W przedstawionym poniżej kodzie operator
in
wraz z instrukcją
if
pozwalają nam uniknąć
wszelkich potknięć związanych z dostępem do klucza
banany
, które to potknięcia — jak to
zwykle bywa w przypadku tego rodzaju owoców — mogą się źle skończyć (nawet dla nas).
Pokazany powyżej kod powoduje zmiany stanu słownika
fruits
w pamięci
interpretera w sposób przedstawiony poniżej.
Tak jak się spodziewaliśmy, słownik
fruits
został powiększony o jedną parę klucz-
wartość, a wartość powiązana z kluczem
banany
została zainicjalizowana liczbą
1
.
Stało się tak, ponieważ warunek sprawdzany przez instrukcję
if
okazał się fałszywy
(gdyż klucza nie udało się znaleźć w słowniku). Z tego powodu zamiast instrukcji
inkrementacji wykonana została instrukcja przypisania, która znajduje się w drugim
zestawie (związanym z częścią
else
instrukcji warunkowej). Zobaczmy, co się stanie,
gdy kod ten zostanie wykonany raz jeszcze.
Porady maniaka
Jeśli z innych języków programowania
znany Ci jest trójargumentowy
operator ? :, wiedz, że Python
zapewnia możliwość korzystania
z podobnej konstrukcji. Możesz napisać
następujący wiersz kodu:
x = 10 if y > 3 else 20
aby zmiennej x przypisać wartość 10 lub
20 w zależności od tego, czy wartość
zmiennej y jest większa niż 3. Musisz
też jednak wiedzieć, że większość
programistów korzystających z Pythona
skrzywiłaby się z niesmakiem na widok
zastosowania tej konstrukcji, ponieważ
uważają oni, że odpowiadające jej
znaczeniowo instrukcje if... else...
znacznie łatwiej się czyta.
Sprawdzamy, czy klucz ‘banany’ znajduje
się w słowniku, a ponieważ go tam
nie ma, inicjalizujemy związaną z nim
wartość za pomocą liczby 1. Unikamy
w ten sposób jakiejkolwiek możliwości
wystąpienia wyjątku KeyError.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.