PythonPodcast 26 - itnett/FTD02H-N GitHub Wiki

Python Historie og Teori: 100 Begreper for Deg Uten Forkunnskaper (Del 5)

Velkommen til den femte og siste episoden i vår spesialserie! I denne delen skal vi fokusere på debugging, testing, unntaksbehandling og objektorientert programmering. Vi kommer også til å binde sammen alle de viktige konseptene vi har lært til nå, og vise hvordan alt henger sammen. Husk at målet fortsatt er å forstå Python uten å skrive kode, men gjennom audiovisuelle forklaringer og praktiske eksempler.


131-140: Debugging og Feilsøking

  1. Debugging: Dette er prosessen med å identifisere og fikse feil i koden din. Når et program ikke oppfører seg som forventet, vil en utvikler bruke debugging for å finne årsaken til feilen og løse den.

  2. Feilmeldinger: Når noe går galt i Python-koden, vil programmet gi deg en feilmelding. Disse meldingene inneholder viktig informasjon som hjelper deg med å finne ut hva som har gått galt, som linjenummer og type feil.

  3. Sporing (Traceback): Dette er en del av feilmeldingen som viser hvor i koden feilen oppsto. Den lister opp funksjonene som ble kalt før feilen skjedde, og gir deg en tydelig vei til problemet.

  4. Breakpoint: Et verktøy som brukes i debugging for å stoppe kjøringen av programmet på et bestemt sted. Dette lar deg undersøke tilstanden til variabler og programflyten for å forstå hva som går galt.

  5. Loggmeldinger (Logging): En måte å skrive ut meldinger mens programmet kjører for å hjelpe med å forstå hva som skjer i løpet av programflyten. Logging er spesielt nyttig når du feilsøker komplekse programmer.

  6. Print-debugging: Den enkleste formen for debugging der du legger til print-setninger i koden for å vise verdiene til variabler på forskjellige stadier i programmet. Dette hjelper med å forstå hvor ting går galt.

  7. Unntak (Exception): Unntak er spesielle typer feil som skjer under kjøring av et program. For eksempel, hvis du prøver å dele et tall på null, vil det kaste et "ZeroDivisionError"-unntak.

  8. Try-Except blokker: Et verktøy i Python for å håndtere unntak. Du kan "fange" et unntak og forhindre at programmet krasjer ved å bruke en try-except-blokk, og deretter behandle feilen på en kontrollert måte.

  9. Unntaksbehandling: Prosessen med å håndtere feil i programmet ditt uten å krasje det. Dette kan innebære å vise en vennlig feilmelding til brukeren eller forsøke å gjenopprette programmet etter en feil.

  10. Stack Overflow: En av de vanligste feilmeldingene som oppstår når en funksjon kaller seg selv for mange ganger uten å stoppe. Dette fører til at programmet går tom for plass i minnet.


141-150: Testing og Kvalitetssikring

  1. Unit Testing: Dette er en metode der du tester små, isolerte deler av programmet, kjent som "units". For eksempel, hvis du har en funksjon som legger sammen to tall, kan du skrive en test for å sjekke om funksjonen alltid gir riktig svar.

  2. Automatisert Testing: Dette er når du skriver testprogrammer som kan kjøres automatisk hver gang du gjør en endring i koden din. Dette hjelper med å fange feil tidlig i utviklingsprosessen.

  3. Testdekning (Test Coverage): Dette refererer til hvor mye av koden din som er dekket av testene dine. Høy testdekning betyr at de fleste delene av programmet ditt har blitt testet, noe som gir større trygghet for at koden fungerer som forventet.

  4. Mocking: En teknikk som brukes i testing for å "lure" programmet til å tro at det interagerer med eksterne ressurser, som databaser eller API-er, når det i virkeligheten bruker falske data. Dette gjør det enklere og raskere å teste koden din.

  5. Test Cases: Dette er spesifikke situasjoner der du tester en funksjon eller et program for å sikre at det fungerer riktig. Et godt test case tester både normale situasjoner og ekstreme eller uvanlige tilfeller.

  6. TDD (Test-Driven Development): En utviklingsmetodikk der du skriver testene først, og deretter koden for å få testene til å passere. Dette sikrer at programmet fungerer som forventet fra starten av.

  7. Regression Testing: Dette er en metode for å teste et program etter at endringer har blitt gjort for å sikre at de nye endringene ikke har skapt nye feil i gamle deler av programmet.

  8. Integration Testing: Dette er når du tester hvordan forskjellige deler av programmet fungerer sammen. Selv om hver del kan fungere fint på egen hånd, kan de skape problemer når de kombineres.

  9. Boundary Testing: En form for testing som fokuserer på kanttilfellene for data, som å teste funksjoner med de største eller minste verdiene de kan håndtere.

  10. Continuous Integration (CI): En praksis hvor endringer i kode blir testet automatisk hver gang noen gjør en innsjekking i kodebasen. Dette sikrer at koden alltid er i en fungerende tilstand.


151-160: Objektorientert Programmering (OOP)

  1. Klasser: En klasse er en blåkopi for å lage objekter. Den definerer hvilke egenskaper (variabler) og handlinger (metoder) objektet vil ha. For eksempel kan en klasse Bil ha egenskaper som "farge" og "hastighet", og metoder som "kjøre" og "stoppe".

  2. Objekter: Et objekt er en konkret instans av en klasse. Hvis du har klassen Bil, kan du lage objekter som min_bil eller din_bil, hver med sine egne egenskaper.

  3. Konstruktør (Constructor): En spesiell metode i en klasse som automatisk blir kalt når et objekt blir laget. I Python heter denne metoden init. Konstruktøren brukes til å initialisere objektets egenskaper.

  4. Metoder: Dette er funksjoner som tilhører et objekt. For eksempel kan en metode i klassen Bil være å akselerere. Metoder kan endre eller bruke objektets egenskaper.

  5. Egenskaper (Attributes): Dette er variablene som hører til et objekt. For eksempel kan en bil ha en egenskap farge som beskriver hvilken farge bilen har.

  6. Arv (Inheritance): En prosess der en klasse kan arve egenskaper og metoder fra en annen klasse. For eksempel kan klassen Sportsbil arve fra klassen Bil, men legge til ekstra funksjonalitet som "turbo".

  7. Polymorfisme: Dette refererer til at forskjellige objekter kan ha samme metode, men implementere den på forskjellige måter. For eksempel kan både en Bil og en Båt ha en metode kjøre, men de oppfører seg forskjellig når de "kjører".

  8. Innkapsling (Encapsulation): En praksis som skjuler de indre detaljene i en klasse fra brukeren. Du gir tilgang til dataene gjennom metoder, men brukeren trenger ikke vite hvordan dataene behandles internt.

  9. Abstraksjon: Dette er prosessen med å skjule unødvendige detaljer og bare vise essensen av objektet. For eksempel trenger en bruker av klassen Bil bare å vite hvordan man bruker metoden kjøre, ikke hvordan motoren fungerer internt.

  10. Interface: En kontrakt mellom klasser som spesifiserer hvilke metoder klassen må implementere. I Python bruker vi abstrakte basisklasser for å skape slike kontrakter.


161-170: Unntaksbehandling

  1. Try-except-finally: En struktur for å håndtere unntak i Python. Try-blokken inneholder koden som kan kaste et unntak, except-blokken behandler unntaket, og finally-blokken inneholder kode som alltid vil kjøre, uansett om det oppstod et unntak eller ikke.

  2. Raise: Et nøkkelord som brukes til å kaste et unntak manuelt. Dette kan være nyttig hvis du oppdager en feiltilstand i programmet ditt som du ønsker å stoppe.

  3. ZeroDivisionError: Et vanlig unntak som kastes når du prøver å dele et tall med null. Dette er en form for unntak som du kan fange opp med except.

  4. KeyError: Dette er unntaket som kastes hvis du prøver å få tilgang til en nøkkel som ikke

ikke finnes i et Python-ordbok (dictionary). For eksempel, hvis du prøver å få tilgang til en nøkkel som ikke er i ordlisten, vil dette unntaket oppstå.

  1. IndexError: Et unntak som kastes når du prøver å få tilgang til et element i en liste ved hjelp av en indeks som er utenfor listen. For eksempel, hvis en liste har tre elementer og du prøver å hente det fjerde, vil du få en IndexError.

  2. TypeError: Dette unntaket oppstår når du prøver å utføre en operasjon på et objekt av feil type. For eksempel, hvis du prøver å legge sammen en streng og et tall uten konvertering, vil Python kaste en TypeError.

  3. ValueError: Oppstår når en funksjon mottar et argument av riktig type, men med en ugyldig verdi. For eksempel, hvis du prøver å konvertere en streng som "hei" til et tall med int(), vil du få en ValueError.

  4. NameError: Dette unntaket oppstår når du prøver å bruke en variabel som ikke har blitt definert. Python gir deg en NameError når den ikke finner variabelen i det gjeldende navneområdet.

  5. AttributeError: Oppstår når du prøver å få tilgang til en egenskap eller metode som ikke finnes på et objekt. For eksempel, hvis du prøver å bruke en metode som ikke er definert på et objekt, vil Python kaste en AttributeError.

  6. Handling av flere unntak: Du kan fange opp flere forskjellige typer unntak i én try-blokk ved å spesifisere flere except-blokker. Dette gjør at du kan håndtere forskjellige typer feil på ulike måter.


171-180: Filbehandling

  1. Åpne filer: Du kan bruke open()-funksjonen i Python for å åpne en fil for lesing, skriving eller andre operasjoner. Det er viktig å spesifisere modus når du åpner en fil, for eksempel "r" for lesing, "w" for skriving, eller "a" for å legge til i en fil.

  2. Lesing fra filer: Ved hjelp av read()-metoden kan du lese innholdet av en fil som en helhet. Hvis du vil lese linje for linje, kan du bruke readline() eller iterere gjennom filen med en løkke.

  3. Skriving til filer: For å skrive til en fil bruker du write()-metoden. Husk at hvis filen åpnes i "w"-modus, vil alt eksisterende innhold bli slettet før du skriver. Hvis du vil legge til uten å slette eksisterende innhold, bruk "a"-modus (append).

  4. Stenge filer: Det er viktig å lukke filen etter at du er ferdig med å bruke den. Dette gjøres med close()-metoden for å frigjøre ressurser.

  5. with-setningen: En effektiv måte å håndtere filer på er ved hjelp av with-setningen. Når du bruker with, trenger du ikke å eksplisitt lukke filen, siden Python vil håndtere dette automatisk når du er ferdig.

  6. CSV-filer: CSV-filer (Comma Separated Values) er en enkel måte å lagre tabellformede data på. Python har et innebygd csv-bibliotek som lar deg lese og skrive slike filer enkelt.

  7. JSON-filer: JSON (JavaScript Object Notation) er et populært format for å representere data. Python tilbyr json-modulen som lar deg konvertere Python-objekter til JSON og omvendt.

  8. Filbehandling i binær modus: Når du arbeider med ikke-tekstlige data, som bilder eller videoer, kan du bruke binær modus ved å åpne filer med "rb" (lesing i binær) eller "wb" (skriving i binær) moduser.

  9. Filstier: Når du jobber med filer, må du spesifisere riktig filsti. Dette kan være en relativ sti (i forhold til den nåværende mappen) eller en absolutt sti (som inkluderer hele banen til filen på datamaskinen).

  10. Unntaksbehandling i filbehandling: Filoperasjoner kan mislykkes av mange grunner, som at filen ikke finnes eller at du ikke har skrivetilgang. Derfor er det en god praksis å bruke try-except-blokker når du jobber med filer for å håndtere slike feil.


181-190: Sikkerhet i Programmering

  1. Sikker filbehandling: Når du jobber med filer, er det viktig å ikke overstyre viktige systemfiler ved et uhell. Bruk alltid riktige filnavn og pass på at du har nødvendige tillatelser før du skriver til en fil.

  2. Input-validering: En grunnleggende sikkerhetspraksis er å validere alt brukerinput for å unngå angrep som injeksjon (f.eks. SQL-injeksjon). Du bør aldri stole på input fra brukere uten å sjekke det først.

  3. SQL-injeksjon: En type angrep hvor ondsinnet SQL-kode blir satt inn i et program som samhandler med en database. Bruk forberedte uttalelser eller parameteriserte spørringer for å beskytte mot dette.

  4. Hashing: En måte å konvertere data til en fast lengde streng som er vanskelig å reversere. Dette brukes ofte til å lagre passord på en sikker måte.

  5. Salting: En teknikk som brukes sammen med hashing for å øke sikkerheten ved å legge til en tilfeldig verdi (salt) til passordet før det hashes. Dette gjør det vanskeligere for angripere å bruke forhåndsberegnede lister over hash-verdier (rainbow tables).

  6. Kryptering: En metode for å beskytte data ved å gjøre dem ulestlige uten en spesiell nøkkel. Kryptering brukes for å beskytte sensitiv informasjon under overføring og lagring.

  7. Autentisering: En prosess som bekrefter identiteten til en bruker eller enhet. I programmering kan dette innebære å be om et brukernavn og passord og sjekke om disse samsvarer med det som er lagret i databasen.

  8. Autorisasjon: Etter autentisering, autorisasjon sjekker hva en bruker har lov til å gjøre. For eksempel, en bruker kan autentisere seg med et gyldig passord, men autorisasjon vil bestemme om de har tilgang til bestemte ressurser.

  9. Bruk av API-er: Når du jobber med API-er, er det viktig å bruke sikre metoder for autentisering, som for eksempel OAuth, for å unngå at sensitive data lekker. API-er kan utsette sårbare punkter hvis de ikke sikres ordentlig.

  10. Kodegjennomgang (Code Review): En praksis der flere utviklere går gjennom koden for å finne feil og sikkerhetsproblemer. Kodegjennomgang forbedrer kvaliteten på programvaren og reduserer sikkerhetsrisikoer.


191-200: Avslutning: Kodekvalitet og Beste Praksis

  1. Kodekommentarer: Gode kommentarer i koden hjelper andre utviklere (eller deg selv senere) med å forstå hva koden gjør. Kommenter hensikten med koden, ikke bare hvordan den fungerer.

  2. Kodenavn (Variabelnavn): Bruk meningsfulle navn på variabler, funksjoner og klasser. Dette gjør koden enklere å lese og forstå.

  3. Konsistens: Hold deg til en konsekvent stil når du skriver kode. For eksempel, følg en bestemt konvensjon for innrykk og mellomrom, som å bruke fire mellomrom for hvert innrykk i stedet for tabulatorer.

  4. Unngå duplisering av kode: Hvis du finner deg selv med den samme logikken flere steder i koden, bør du vurdere å lage en funksjon eller metode for å gjenbruke den. Dette reduserer feil og gjør koden lettere å vedlikeholde.

  5. Refaktorering: En prosess hvor du forbedrer koden din uten å endre dens funksjonalitet. Målet er å gjøre koden renere, enklere å forstå og mer vedlikeholdbar.

  6. Dokumentasjon: Skriv dokumentasjon for koden din. Dette hjelper andre (og deg selv) med å forstå hvordan programmet fungerer og hvordan det skal brukes.

  7. Unit-testing: En god praksis er å skrive tester for hver funksjon du lager. Dette sikrer at koden fungerer som forventet, selv etter at du har gjort endringer.

  8. Modularisering: Del opp programmet i små, selvstendige moduler eller filer. Dette gjør det lettere å organisere koden og gjør den mer gjenbrukbar.

  9. Bruk av Git for versjonskontroll:

  10. Bruk av Git for versjonskontroll: Git er et verktøy for å holde oversikt over endringer i koden din. Det lar deg se historikken til prosjektet, samarbeide med andre utviklere og rulle tilbake til tidligere versjoner hvis noe går galt.

  11. Kontinuerlig læring: Python og programmering generelt er et felt som stadig utvikler seg. Nye verktøy, teknikker og beste praksiser dukker opp hele tiden. Sørg for at du kontinuerlig lærer og holder deg oppdatert ved å lese bøker, følge med på utviklingsmiljøer og delta i prosjekter.


Oppsummering av de 200 Begrepene

Gjennom denne serien har vi gått i dybden på mange viktige konsepter som er essensielle for alle som ønsker å lære Python og programmering generelt. Fra grunnleggende konsepter som variabler, løkker, og funksjoner, til mer avanserte emner som unntaksbehandling, filbehandling, objektorientert programmering, testing, og sikkerhet.

Det viktigste å huske på er at programmering handler om problemløsning. Hver linje med kode er et steg mot å løse et problem, og hvert konsept vi har dekket gir deg et nytt verktøy til å takle komplekse utfordringer.


Takk for at du fulgte med!

Denne serien med episoder har som mål å gi deg en solid forståelse av Python uten å nødvendigvis dykke dypt inn i å skrive kode selv. Det er et unikt pedagogisk grep som hjelper deg med å bygge en mental modell av hvordan Python fungerer. Husk å øve, skrive kode, og eksperimentere med alt du har lært for å virkelig mestre det.

Lykke til på din Python-reise, og husk: programmering handler om å lære gjennom praksis, repetisjon og kontinuerlig nysgjerrighet! 🚀