Jason. Cała informatyka w jednym miejscu!

Kolejny materiał na temat języka Python opisze do czego służy słowo kluczowe "with" w Pythonie. To w pewnym stopniu nawiązuje do artykułu o obsłudze wyjątków w Pythonie, więc przypomnijcie sobie powierzchownie o co w ogóle chodzi. Wchodźcie do środka, aby dowiedzieć się fundamentalnych informacji o bardziej unikatowym słowie kluczowym!

"WITH" W PYTHONIE JAKO RZADZIEJ SPOTYKANE SŁOWO

Zdążyliście pewnie już parę podobieństw wyciągnąć z tego języka, które przypominają składnią, postacią lub słowami kluczowymi. Taka rzecz jak pętla "for" jest często spotykana. Dynamicznych typów danych również można się dopatrzeć choćby w języku JavaScript. Ale "with"?! Można sobie pomyśleć "kolejna jakaś szkaradna składnia" :D. Otóż nie ;).

CO NAM DAJE "WITH"?

Słowo kluczowe "with" w Pythonie najprościej pisząc robi dwie rzeczy:

  1. pozwala normalnie pisać "ryzykowny" kod bez konieczności opatrywania go w klauzule "try" oraz "except",
  2. "dba" o prawidłowy przebieg programu w razie, gdybyśmy zapomnieli o instrukcjach w pewnym sensie "oczekiwanych przez program" np. o zamknięciu pliku po zakończeniu dodawania do niego tekstu.

Patrzcie na te podpunkty z przymrużeniem oka, gdyż jest to zapis bardzo abstrakcyjny, aby nie wchodzić w szczegóły zbyt szybko. Oczywiście, że w pewnych sytuacjach trzeba będzie sięgnąć po przechwytywanie wyjątków, nawet razem z "with". Mogę na razie dodać tyle, że całe ułatwienie sprawy zawdzięczymy klasom.

SKŁADNIA

Jak możemy rozpoznać budowę "with" w kodzie źródłowym? Tak się prezentuje, proszę bardzo:

with [funkcja zwracająca obiekt] as [nazwa zmiennej]:
    # dalsze instrukcje

Dwukropek na końcu, drodzy Państwo! Nie ma wyjątków :). W środku nowo utworzonego bloku wstawia się dowolne instrukcje, przy czym aby to miało sens, powinno umieszczać się instrukcje operujące na zmiennej po słowie "as". Chociażby dlatego, że ta zmienna istnieje tylko w obrębie bloku kodu "with".

Weźmy sobie teraz pod lupę przykładowy kod źródłowy: obsługę otwarcia pliku tekstowego. Wiemy już jak to się robi w sposób tradycyjny, prawda? Funkcje "open", "read" i "close". No właśnie, ręczne zamykanie pliku. A co jak się zapomni? Każdy z zapominalskich powinien jeszcze bardziej polubić "with" w Pythonie :). Wówczas kod może wyglądać tak:

with open("sample.txt", "r", encoding="utf8") as file:
    # dalsze instrukcje

Nie trzeba zamykać pliku metodą "close"! To jest ten punkt #2 przytoczony wyżej jak wspominałem o tym "kodzie powinnościowym". Formalnie powinniśmy samodzielnie zadbać o zamknięcie pliku, aby wypaść kulturalnie. Natomiast, gdy opatrzymy to blokiem kodu "with", program wtedy sam dopilnuje zamknięcia pliku.

Żeby nie było. To nie jest tak, że użyjemy sobie "with" i już nie będziemy nigdy musieli opatrywać kodu w "try" i "except" (ewentualnie jeszcze "finally"). Powtarzam, mogą powstać przypadki wymagające obejścia tradycyjnego.

UWAGA ODNOŚNIE KOLEJNOŚCI WYKONYWANIA

Od siebie dodam jeszcze, że "with" w Pythonie "robi swoje" po zakończeniu wszystkich zawartych instrukcji. Czyli w tym przypadku, wywoływana jest metoda "close" dopiero jako ostatnia, tak samo jak gdyby została dopisana na samym końcu. Jeżeli kiedykolwiek byśmy chcieli zamknąć plik wcześniej, wtedy już musimy to dopisać jawnie, ale potem za żadne skarby nie wolno nam korzystać z już zamkniętego pliku!

JAKA "MAGIA" SIĘ ZA TYM KRYJE?

Ostatni akapit na króciutkie wyjaśnienie całego sekretu jaki się kryje za ułatwieniem pisania przez "with". Jak wspomniałem, to jest zasługa korzystania z klas. A konkretniej, są takie dwie metody "uruchamiające swój zapalnik" przy wejściu do "with" i przy wyjściu z "with". Są to "__enter__" oraz "__exit__" (tak, pisze się po dwa znaki "podłogi" po obu stronach). Więcej informacji o klasach i programowaniu obiektowym w Pythonie zostało zawartych w osobnym artykule.

Metody "__enter__" oraz "__exit__" w klasie w Pythonie

"with" w Pythonie swoją możliwość podnoszenia bezpieczeństwa zawdzięcza metodom "__enter__" oraz "__exit__" umieszczonym w klasie.


Od teraz będziecie wiedzieli, że macie jeszcze jeden sposób pisania bezpiecznego kodu. Słowo kluczowe "with" na pewno kiedyś Wam się przyda, bo przecież kto z nas nie dąży do łatwego życia...i programowania ;)?

PODOBNE ARTYKUŁY