Jak używać instrukcji „Pass” w Pythonie

Pisząc program, rzadko piszesz cały kod za jednym razem i uruchamiasz go tylko na końcu. Zamiast tego najprawdopodobniej napiszesz trochę kodu, uruchomisz program, napiszesz trochę więcej i powtarzasz, aż skończysz.

Skutecznie podzielisz i pokonasz swój program, koncentrując się na niektórych istotnych częściach i pomijając inne, a następnie wracając, aby wypełnić luki. Aby skutecznie to zrobić w Pythonie, musisz użyć instrukcji pass, która jest tematem tego artykułu.

Co to jest oświadczenie „Pass”?

W przeciwieństwie do większości słów kluczowych, które każą tłumaczowi coś zrobić, instrukcja pass jest wyjątkowa, ponieważ każe tłumaczowi nie robić nic. Jest używany wewnątrz bloków.

Bloki w Pythonie to wiersze kodu wcięte pod funkcjami, klasami lub instrukcjami przepływu sterowania. Instrukcje sterowania przepływem to instrukcje, które zmieniają normalne wykonywanie programu od góry do dołu przez pominięcie kodu za pomocą instrukcji warunkowych lub powtórzenie wykonania kodu za pomocą pętli. Typowymi słowami kluczowymi przepływu sterowania w Pythonie są if, for i while.

Potrzeba zaświadczenia o przepustce

Wyjaśniłem wcześniej, że instrukcja pass jest instrukcją, która nic nie robi. Ale po co nam instrukcja, która nic nie robi, kiedy budujemy program, który coś robi? W tej sekcji wyjaśnię przypadki użycia instrukcji pass.

# 1. Symbol zastępczy do przyszłej implementacji

Jak wspomniano we wstępie, podczas pisania programu pomocne jest dzielenie i zwyciężanie. Na przykład podczas pisania funkcji możesz chcieć utworzyć nagłówek funkcji i wrócić później, aby napisać treść funkcji.

Ale interpreter Pythona nakrzyczy na ciebie, jeśli spróbujesz uruchomić kod. Dzieje się tak, ponieważ Python oczekuje, że treść funkcji lub dowolnego bloku kodu będzie zawierała co najmniej jedną instrukcję. Oto przykładowa funkcja, którą mam w pliku Pythona:

def my_function():
    # Will write the code later
    # For now there are no statements

Teraz, jeśli spróbuję wykonać kod, otrzymam błąd składniowy, który mówi coś takiego:

File "<ipython-input-1-58189b01193e>", line 3
    # For now there are no statements
                                     ^
SyntaxError: incomplete input

Nasza strategia „dziel i rządź” nie zadziała, jeśli napiszemy wszystko z wyprzedzeniem, ale Python wymaga, abyśmy przynajmniej coś napisali. Oświadczenie pass pomaga w tym względzie. Technicznie rzecz biorąc, jest to instrukcja, więc jeśli umieścisz ją w bloku, Python nie będzie na ciebie krzyczeć. A jednak to nic nie robi, więc nie musisz się martwić o logikę funkcji. Oto poprzednia funkcja z instrukcją pass.

def my_function():
    # Will write the code later
    # For now we only have the pass statement
    pass

Teraz, jeśli uruchomimy kod, nie otrzymamy błędów.

Możesz także wywołać tę funkcję, aby potwierdzić, że nic nie robi.

Zasadniczo jest to główny przypadek użycia instrukcji pass w Pythonie — jako symbol zastępczy dla pustych bloków kodu. Nie musi to być tylko funkcja, ale działa z wyrażeniami warunkowymi, pętlami i klasami.

#2. Implementacja klas abstrakcyjnych i interfejsów

Instrukcja pass może być również użyta do zaimplementowania klasy abstrakcyjnej. Klasa abstrakcyjna to klasa, która implementuje metody abstrakcyjne, a metoda abstrakcyjna to metoda zdefiniowana, ale niezaimplementowana. Jest to podobne do opisanego powyżej przypadku użycia, w którym użyliśmy wyrażenia pass jako symbolu zastępczego. Jednak w przeciwieństwie do poprzedniego przypadku, w którym oświadczenie pass było tylko tymczasowe, w tym przypadku jest trwałe.

Klasy abstrakcyjne to klasy bazowe, które definiują metody, które powinny implementować dziedziczące po nich klasy nadrzędne. Klasy abstrakcyjne nie implementują żadnej logiki; definiują metody, które składają się na odziedziczone po nich klasy. W rezultacie nie tworzysz bezpośrednio instancji klasy bazowej.

Używasz dekoratora @abstractmethod i klasy ABC zdefiniowanej w pakiecie abc do tworzenia klas abstrakcyjnych w Pythonie. Jeśli nie znasz lub zapomniałeś o dekoratorach, oto artykuł o dekoratorach w Pythonie.

Jak już mówiłem, pakiet abc definiuje dekorator @abstractmethod i klasę ABC, których użyjemy w następujący sposób:

from abc import (abstractmethod, ABC)

class BasicClass(ABC):

    @abstractmethod
    def basic_method(self):
        # Basic method is a method that any superclass of BasicClass should implement
        # So we simply define it here and not implement it
        # So in the body we use the pass statement so its valid code
        pass

BasicClass dziedziczy z klasy ABC. Ponadto mamy dekorator @abstraccmethod zdefiniowany wokół metody basic_method. Teraz możesz dziedziczyć po tej klasie i zaimplementować metodę basic_method.

class DerivedClass(BasicClass):
    def basic_method(self):
        print("Hello from the defined basic method")

Następnie możesz utworzyć instancję tej klasy i przetestować uruchomienie metody basic_method.

my_object = DerivedClass()

my_object.basic_method()

Kiedy to uruchomisz, powinieneś być w stanie wyświetlić wiadomość na ekranie.

Hello from the defined basic method

#3. Nic nie robić z przechwyconymi wyjątkami

Gdy program napotka błąd w Pythonie, zgłasza wyjątek. Wyjątki są uciążliwe, ponieważ powodują awarię programu i zatrzymanie wykonywania. Można jednak przechwytywać i obsługiwać wyjątki, aby zapobiec awariom programu. Możesz użyć instrukcji pass, jeśli nie chcesz robić nic konkretnego, aby obsłużyć błąd. Oto przykład:

try:
    # code that will definitely raise an exception
    raise Exception('Some exception')
except:
    pass

Jeśli uruchomisz powyższy kod, nic się nie stanie. Dzieje się tak, ponieważ wyjątek jest zgłaszany i obsługiwany przez kod w bloku wyjątku. Ale ten kod nic nie robi, więc nic się nie dzieje. Zwykle, z wyjątkami, chciałbyś je rejestrować lub obsługiwać z wdziękiem. Ale jeśli nie chcesz nic robić, tak właśnie byś to zrobił.

Czym różni się komunikat Pass od przerwania i kontynuacji?

Inne słowa kluczowe, które możesz napotkać, to przerwanie i kontynuowanie. Krótko mówiąc, wyjaśnię, co robią, abyś mógł zobaczyć, czym różnią się od instrukcji pass.

Oświadczenie o przerwaniu

Instrukcja break służy do wyjścia z pętli. Każda następna iteracja pętli jest następnie anulowana. Załóżmy na przykład, że piszesz funkcję wyszukiwania liniowego. Gdy element zostanie znaleziony, nie ma powodu, aby kontynuować iterację do końca listy. Wyjście z pętli miałoby sens. Więc użyłbyś instrukcji break. Oto przykład liniowej funkcji wyszukiwania:

def linear_search(values, search_value):
    for i in range(len(values)):
        if values[i] == search_value
            print("Value found at index", i)
            break

Kontynuuj oświadczenie

Instrukcja continue służy do pominięcia bieżącej iteracji w pętli. Jeśli iterujesz po liście liczb, gdy twój program napotka instrukcję continue, zatrzyma bieżącą iterację i przejdzie do następnej iteracji. Pętla działa dalej. Poniżej przedstawiono przykładową funkcję korzystającą z instrukcji continue. Program podwaja wszystkie liczby nieparzyste, więc lista zawiera tylko liczby parzyste.

def make_even(nums):
    for i in range(len(nums)):
        if nums[i] % 2 == 0:
            # If the num is already even we jump to the next iteration using continue
            continue
        
        # Only odd numbers will get to this point
        # We double the number so it becomes even
        nums[i] *= 2

Mamy nadzieję, że dzięki zrozumieniu instrukcji break i continue udało ci się odróżnić je od instrukcji pass.

Najlepsze praktyki dotyczące korzystania z oświadczenia o przepustce

✅ Pamiętaj, że oświadczenie o przepustce jest zwykle używane jako tymczasowy symbol zastępczy; pamiętaj, aby zastąpić instrukcję pass rzeczywistym kodem, gdy będziesz gotowy.

✅ Jeśli używasz oświadczenia o przepustce do celów innych niż tymczasowy symbol zastępczy, dołącz komentarz wyjaśniający, dlaczego się tam znajduje.

Ostatnie słowa

W tym artykule wyjaśniłem instrukcję pass w Pythonie, przydatne słowo kluczowe, które umożliwia dzielenie i zwyciężanie podczas pisania kodu. Instrukcja pass jest również opisana w dokumentacji Pythona.

Następnie sprawdź typowe typy błędów języka Python i sposoby ich rozwiązywania.