Python_Essentials_20 - itnett/FTD02H-N GitHub Wiki

Her er den neste siden som dekker Avanserte Python Emner, som blant annet Dekoratører, Iteratorer, Generatorer, og Regular Expressions (Regex), optimalisert for en GitHub Wiki med visuelle hjelpemidler, formatering, og emojier for å gjøre det enklere for nybegynnere å forstå.


🛠️ Python Avanserte Emner

Dekoratører 🌀

Dekoratører er en mektig funksjon i Python som lar deg endre oppførselen til funksjoner eller metoder. Dette brukes ofte til å logge, kontrollere tilgang eller modifisere utdata.

Hvordan fungerer dekoratører? 🤔

En dekoratør er en funksjon som tar en annen funksjon som parameter og returnerer en ny funksjon med modifisert oppførsel.

💡 Eksempel:

def min_dekorator(funksjon):
    def wrapper():
        print("Før funksjonen kjører")
        funksjon()
        print("Etter funksjonen har kjørt")
    return wrapper

@min_dekorator
def si_hei():
    print("Hei!")

si_hei()
  • Her ser du @min_dekorator over funksjonen si_hei. Dette betyr at vi bruker dekoratoren til å "pakkes inn" rundt si_hei for å legge til ekstra atferd før og etter funksjonen kjører.

📝 Merk: Dekoratører kan brukes på funksjoner og klasser for å endre oppførselen deres uten å direkte endre koden deres.

Iteratorer og Generatorer 🔄

Iteratorer

En iterator er et objekt som kan traverseres (gås gjennom) ett element om gangen, som en liste eller et sett.

💡 Eksempel:

min_liste = [1, 2, 3]
min_iterator = iter(min_liste)

print(next(min_iterator))  # Output: 1
print(next(min_iterator))  # Output: 2
  • Her bruker vi iter() for å lage en iterator, og next() for å hente det neste elementet i listen.

Generatorer ⚡

Generatorer er en type iterator som returnerer verdier ved å bruke yield i stedet for return. De er spesielt nyttige for å håndtere store mengder data uten å bruke for mye minne.

💡 Eksempel:

def min_generator():
    for i in range(3):
        yield i

gen = min_generator()

print(next(gen))  # Output: 0
print(next(gen))  # Output: 1
  • Når yield brukes, lagres generatorens tilstand slik at den kan gjenopptas der den slapp neste gang den kalles.

Fordeler med generatorer:

  • De sparer minne, ettersom de genererer elementer "på farten".
  • De er nyttige for store datasett som ikke kan lastes inn i minnet på en gang.

💻 Regular Expressions (Regex)

Regex, eller "regular expressions", er et mønstermatchingsverktøy som brukes for å finne og manipulere tekst. Det er svært nyttig når du jobber med tekstdata i Python.

Enkle eksempler på regex-syntaks:

Tegn Beskrivelse Eksempel
. Matcher ethvert tegn unntatt linjeskift r".ar" matcher "car", "bar", osv.
^ Begynner med r"^Hei" matcher "Hei verden"
$ Slutter med r"verden$" matcher "Hei verden"
\d Matcher et siffer (0-9) r"\d{3}" matcher "123"
\w Matcher et alfanumerisk tegn r"\w+" matcher "ord123"
+ Matcher ett eller flere r"a+" matcher "aa", "aaa", osv.

💡 Eksempel på bruk i Python:

import re

tekst = "Mitt telefonnummer er 123-456-7890."
mønster = r"\d{3}-\d{3}-\d{4}"

match = re.search(mønster, tekst)

if match:
    print(f"Telefonnummer funnet: {match.group()}")

Grunnleggende funksjoner i re-modulen:

  • re.search(mønster, tekst): Søker etter mønsteret i teksten og returnerer det første treffet.
  • re.findall(mønster, tekst): Returnerer alle treff for mønsteret i teksten som en liste.
  • re.sub(mønster, erstatning, tekst): Erstatter mønsteret med en ny tekst.

Regex er kraftig, men kan være vanskelig å mestre. Det beste er å eksperimentere med små mønstre og bygge dem opp etter hvert som du blir mer komfortabel med syntaksen.


📝 Oppgaver:

1. Oppgave: Bruke en dekoratør

Skriv en dekoratør som logger før og etter en funksjon kjører. Bruk den på en funksjon som returnerer en velkomstmelding.

💡 Hint:

  • Lag en dekoratør som printer en melding før og etter at funksjonen kjører.
def log_decorator(func):
    def wrapper():
        print("Før funksjonen kjører.")
        func()
        print("Etter funksjonen kjører.")
    return wrapper

@log_decorator
def velkommen():
    print("Velkommen til Python!")

velkommen()

2. Oppgave: Skape en generator

Lag en generator som returnerer de første n Fibonacci-tallene. Test den med en for-løkke.

💡 Hint:

  • Fibonacci-tallene starter med 0 og 1, og hvert påfølgende tall er summen av de to foregående.
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

for tall in fibonacci(5):
    print(tall)

3. Oppgave: Bruke regex for å validere e-postadresser

Skriv en funksjon som bruker regex for å sjekke om en e-postadresse er gyldig. En gyldig e-postadresse har formatet: [email protected]

💡 Hint:

  • Du kan bruke regex mønsteret r"[^@]+@[^@]+\.[^@]+".
import re

def sjekk_epost(epost):
    mønster = r"[^@]+@[^@]+\.[^@]+"
    if re.match(mønster, epost):
        print("Gyldig e-postadresse!")
    else:
        print("Ugyldig e-postadresse.")

sjekk_epost("[email protected]")
sjekk_epost("feiladresse")

🎯 Oppsummering

  • Dekoratører lar deg modifisere oppførselen til funksjoner og metoder, uten å endre funksjonens kildekode direkte.
  • Iteratorer og generatorer hjelper deg med å håndtere datastrukturer og store datasett effektivt ved å gå gjennom elementer ett om gangen.
  • Regular Expressions (Regex) gir deg kraftige verktøy for å søke, finne og manipulere tekst, noe som er svært nyttig i databehandling.

🔗 Tilbake til forrige side: Feilhåndtering og Filbehandling | Neste side: Objektorientert Programmering i Python →


Fortsett å eksperimentere med avanserte konsepter som dekoratører, generatorer og regex for å få en dypere forståelse av hvordan Python kan hjelpe deg med å løse komplekse problemer! 🐍✨