Når man utvikler programvare, skjer det sjelden at all kode skrives på én gang og deretter kjøres. Vanligvis skriver man litt kode, tester den, fortsetter med mer kode, og gjentar denne prosessen til prosjektet er ferdig.
Man deler effektivt opp programmeringsarbeidet ved å konsentrere seg om essensielle deler og utelate andre i starten, for så å fylle ut de manglende delene senere. For å gjøre dette på en god måte i Python, trenger man å kjenne til «pass»-setningen, som er temaet for denne artikkelen.
Hva betyr «pass»-setningen?
I motsetning til de fleste kommandoer som forteller datamaskinen å utføre en handling, er «pass»-setningen unik fordi den instruerer Python om å ikke gjøre noe. Den brukes inni kodeblokker.
Kodeblokker i Python er linjer som er rykket inn under funksjoner, klasser eller kontrollstrukturer. Kontrollstrukturer er setninger som endrer den vanlige, sekvensielle utførelsen av kode ved enten å hoppe over kode ved hjelp av betingelser, eller ved å gjenta kode ved hjelp av løkker. De vanligste kommandoene for kontrollstrukturer i Python er «if», «for» og «while».
Hvorfor trenger man «pass»-setningen?
Tidligere ble det nevnt at «pass»-setningen ikke utfører noen handling. Men hvorfor skulle man ha behov for en kommando som ikke gjør noe når man lager et program som skal utføre oppgaver? Denne delen forklarer de vanlige situasjonene der «pass»-setningen er nyttig.
#1. Plassholder for fremtidig kode
Som nevnt i innledningen, er det praktisk å dele opp programmeringsarbeidet når man skriver kode. For eksempel, når man definerer en funksjon, kan man ønske å skrive funksjonens overskrift og deretter komme tilbake for å legge til funksjonens innhold senere.
Men Python vil gi en feilmelding hvis man prøver å kjøre koden. Det er fordi Python forventer at en funksjons kropp, eller hvilken som helst kodeblokk, inneholder minst én setning. Her er en eksempel-funksjon i en Python-fil:
def min_funksjon(): # Skriver koden senere # Foreløpig ingen setninger
Hvis man prøver å kjøre denne koden, vil man få en syntaksfeil som ligner på denne:
Fil "<ipython-input-1-58189b01193e>", linje 3 # Foreløpig ingen setninger ^ SyntaxError: ufullstendig inndata
Vår del-og-hersk-strategi fungerer ikke hvis vi må skrive alt på forhånd, men Python krever at vi skriver i det minste noe. «pass»-setningen hjelper i dette tilfellet. Den er teknisk sett en setning, så hvis man inkluderer den i en blokk, vil ikke Python gi en feilmelding. Samtidig utfører den ingen handling, så man trenger ikke å bekymre seg for funksjonslogikken. Her er den samme funksjonen med «pass»-setningen:
def min_funksjon(): # Skriver koden senere # Foreløpig har vi bare pass-setningen pass
Nå vil ikke programmet gi feilmelding når man kjører koden.
Man kan også kalle funksjonen for å bekrefte at den ikke gjør noe.
Dette er hovedanvendelsen av «pass»-setningen i Python – som en plassholder for tomme kodeblokker. Den kan brukes ikke bare i funksjoner, men også i betingelser, løkker og klasser.
#2. Implementering av abstrakte klasser og grensesnitt
«pass»-setningen kan også brukes til å implementere en abstrakt klasse. En abstrakt klasse er en klasse som implementerer abstrakte metoder, og en abstrakt metode er en metode som er definert, men ikke implementert. Dette ligner på det forrige eksemplet, der «pass»-setningen ble brukt som en plassholder. Men i motsetning til det forrige tilfellet, der «pass»-setningen var midlertidig, er den i dette tilfellet permanent.
Abstrakte klasser er basisklasser som definerer metodene som underklassene som arver fra dem, skal implementere. Abstrakte klasser implementerer ikke selve logikken; de definerer bare metodene. Man oppretter derfor ikke en instans av en basisklasse direkte.
Man bruker «@abstractmethod»-dekoratoren og «ABC»-klassen som er definert i «abc»-pakken for å lage abstrakte klasser i Python.
Som nevnt, definerer «abc»-pakken «@abstractmethod»-dekoratoren og «ABC»-klassen, som kan brukes på følgende måte:
from abc import (abstractmethod, ABC) class GrunnleggendeKlasse(ABC): @abstractmethod def grunnleggende_metode(self): # Grunnleggende metode er en metode som alle underklasser av GrunnleggendeKlasse bør implementere # Så vi definerer den her, men implementerer den ikke # I stedet bruker vi pass-setningen for å ha gyldig kode pass
«GrunnleggendeKlasse» arver fra «ABC»-klassen. I tillegg er «@abstractmethod»-dekoratoren definert rundt «grunnleggende_metode». Nå kan man arve fra denne klassen og implementere «grunnleggende_metode».
class AvledetKlasse(GrunnleggendeKlasse): def grunnleggende_metode(self): print("Hallo fra den definerte grunnleggende metoden")
Deretter kan man opprette en instans av denne klassen og teste «grunnleggende_metode».
mitt_objekt = AvledetKlasse() mitt_objekt.grunnleggende_metode()
Når man kjører koden, vil meldingen vises på skjermen:
Hallo fra den definerte grunnleggende metoden
#3. Å ikke gjøre noe med fangede unntak
Når et program støter på en feil i Python, oppstår et unntak. Unntak kan føre til at programmet krasjer og stopper. Imidlertid kan man fange og håndtere unntak for å hindre at programmet avsluttes. Hvis man ikke ønsker å gjøre noe spesielt for å håndtere feilen, kan man bruke «pass»-setningen. Her er et eksempel:
try: # Kode som garantert vil generere et unntak raise Exception('Noe gikk galt') except: pass
Hvis man kjører denne koden, vil ingenting skje. Det er fordi unntaket fanges og behandles av koden i «except»-blokken. Men denne koden gjør ingenting, så ingenting skjer. Vanligvis vil man logge eller håndtere unntak på en hensiktsmessig måte. Men hvis man ikke vil gjøre noe, er dette måten å gjøre det på.
Hvordan skiller «pass»-setningen seg fra «break» og «continue»?
Andre nøkkelord man kan komme over er «break» og «continue». Nedenfor forklares hva de gjør, slik at man kan se hvordan de skiller seg fra «pass»-setningen.
«break»-setningen
«break»-setningen brukes til å avslutte en løkke. Alle etterfølgende iterasjoner av løkken avbrytes. Hvis man for eksempel har skrevet en lineær søkefunksjon, er det ingen grunn til å fortsette å iterere til slutten av listen når elementet er funnet. Det er derfor hensiktsmessig å avslutte løkken. Da kan man bruke «break»-setningen. Her er et eksempel på en lineær søkefunksjon:
def lineært_søk(verdier, søke_verdi): for i in range(len(verdier)): if verdier[i] == søke_verdi: print("Verdi funnet på indeks", i) break
«continue»-setningen
«continue»-setningen brukes til å hoppe over den aktuelle iterasjonen i en løkke. Hvis man itererer over en liste med tall, vil programmet stoppe den gjeldende iterasjonen og gå videre til neste iterasjon når det møter en «continue»-setning. Løkken fortsetter å kjøre. Følgende er en eksempelfunksjon som bruker «continue»-setningen. Programmet dobler alle oddetall, slik at listen bare inneholder partall.
def gjør_partall(tall): for i in range(len(tall)): if tall[i] % 2 == 0: # Hvis tallet allerede er partall, hopper vi til neste iterasjon ved hjelp av continue continue # Kun oddetall vil komme hit # Vi dobler tallet slik at det blir partall tall[i] *= 2
Forhåpentligvis har du nå forstått forskjellen mellom «break», «continue» og «pass»-setningen.
Beste praksis for bruk av «pass»-setningen
✅ Husk at «pass»-setningen vanligvis brukes som en midlertidig plassholder. Bytt den ut med den faktiske koden når den er klar.
✅ Hvis man bruker «pass»-setningen til noe annet enn en midlertidig plassholder, bør man inkludere en kommentar som forklarer hvorfor den er der.
Avsluttende ord
I denne artikkelen har vi forklart «pass»-setningen i Python, et nyttig nøkkelord som gjør det lettere å dele opp og bearbeide kode. «pass»-setningen er også dokumentert i Pythons offisielle dokumentasjon.
Deretter kan man se nærmere på vanlige feiltyper i Python og hvordan man løser dem.