Er du i ferd med å forberede deg til et jobbintervju der Python-kunnskaper blir testet, eller er du rett og slett nysgjerrig på å evaluere dine egne Python-ferdigheter? Uansett årsak, er du på rett sted. Her vil vi grundig utforske spørsmål og svar som kan hjelpe deg på veien.
Denne artikkelen er designet for å gi deg innsikt i hva slags spørsmål du kan forvente i et jobbintervju, eller for å hjelpe deg med en selvevaluering av dine Python-evner. Vi anbefaler at du prøver å besvare spørsmålene på egen hånd før du ser på de foreslåtte svarene. Dette vil gi deg en mer nøyaktig vurdering av ditt eget kunnskapsnivå. La oss uten videre fordypning gå i gang med spørsmålene.
Spørsmålene er strukturert i forskjellige kategorier basert på emne. Hver kategori inneholder spørsmål sammen med detaljerte svar. Det er viktig å huske at du kan justere svarene til din egen stil, så lenge du beholder den underliggende betydningen. Dette vil forhindre at intervjueren føler at du bare leser fra et manus.
Python Grunnleggende
#1. Hva er Python?
Python er et høynivå, tolket og allsidig programmeringsspråk. Det gir muligheten til å utvikle et bredt spekter av applikasjoner ved hjelp av tredjeparts biblioteker og rammeverk. Python er også et av de mest brukte programmeringsspråkene innenfor områder som kunstig intelligens (AI) og datavitenskap.
#2. Hva er den vesentligste forskjellen mellom en tolk og en kompilator?
En tolk oversetter kildekode linje for linje til maskinkode ved kjøretid. En kompilator, derimot, oversetter hele koden til maskinkode i én operasjon, før programmet kjøres.
#3. Er Python et statisk eller dynamisk typet språk?
Python er et dynamisk typet språk.
#4. Hva betyr dynamisk typet språk?
Et dynamisk typet språk utfører typekontroll av variabler under kjøring. Eksempler på dynamisk typede språk inkluderer Python, JavaScript og Ruby.
Bonus: I kontrast utfører statisk typede språk typekontroll av variabler ved kompilering. C++, C og Java er eksempler på statisk typede språk.
#5. Nevn noen vanlige bruksområder for Python.
Python utmerker seg med sin enkle og lettfattelige syntaks, som minner om engelsk. Dette, sammen med et stort og aktivt utviklermiljø, gjør at det finnes et bredt utvalg av tredjepartsbiblioteker som kan brukes i ulike utviklingsprosjekter. Python kan brukes til å lage webapplikasjoner, GUI-applikasjoner (grafiske brukergrensesnitt), CLI-applikasjoner (kommandolinjegrensesnitt), og mye mer.
Python er også mye brukt til automatisering. Du kan enkelt lage skript som automatiserer oppgaver som rengjøring av disker, utsending av e-post, innhenting av produktprisinformasjon, osv.
I tillegg er Python et foretrukket språk innen datavitenskap.
#6. Hvilke applikasjoner har du utviklet med Python?
Jeg har laget en rekke automatiseringsskript for å strømlinjeforme repeterende og kjedelige arbeidsoppgaver. Jeg har også utviklet skript for å hente inn informasjon om produktpriser og tilgjengelighet.
I tillegg har jeg arbeidet med rammeverk som Django og Flask for å utvikle webapplikasjoner. Jeg har erfaring med å bygge både mindre og større nettbaserte løsninger ved hjelp av begge disse rammeverkene.
Merk: Dette er bare et eksempel. Din erfaring og dine prosjekter kan være annerledes. Prøv å forklare de ulike områdene du har utforsket ved hjelp av Python. Vis gjerne eksempler på applikasjoner hvis de er tilgjengelige.
Datatyper
#7. Hvilke innebygde datatyper finnes i Python?
Python har flere innebygde datatyper, inkludert int, float, complex, bool, list, tuple, set, dict og str.
Merk: Det er ikke nødvendig å liste opp absolutt alle datatyper i Python. Det kan være mer fornuftig å nevne noen av de du oftest bruker. Intervjueren kan stille oppfølgingsspørsmål basert på svarene dine.
#8. Hva er forskjellen mellom en liste og en tuppel?
Både lister og tupler brukes for å lagre samlinger av elementer. Den primære forskjellen er at en liste er et foranderlig objekt, mens en tuppel er et uforanderlig objekt.
#9. Hva betyr foranderlige og uforanderlige datatyper?
Foranderlige datatyper kan endres etter at de er opprettet. Eksempler på foranderlige objekter i Python er lister, sett og ordbøker.
Uforanderlige datatyper, derimot, kan ikke endres etter at de er opprettet. Strenger og tupler er eksempler på uforanderlige objekter i Python.
#10. Beskriv noen vanlige metoder for lister.
1. **append** – Denne metoden brukes til å legge til et element på slutten av listen.
>>> a = [1, 2] >>> a.append(3) >>> a [1, 2, 3]
2. **pop** – Denne metoden brukes til å fjerne et element fra listen. Den fjerner det siste elementet hvis du ikke oppgir en indeks, eller elementet ved den angitte indeksen.
>>> a = [1, 2, 3, 4, 5] >>> a.pop() 5 >>> a [1, 2, 3, 4] >>> a.pop(1) 2 >>> a [1, 3, 4]
3. **remove** – Denne metoden fjerner det første forekomsten av det spesifiserte elementet fra listen.
>>> a = [1, 2, 2, 3, 4] >>> a.remove(1) >>> a [2, 2, 3, 4] >>> a.remove(2) >>> a [2, 3, 4]
4. **sort** – Denne metoden sorterer listen i stigende eller synkende rekkefølge.
>>> a = [3, 2, 4, 1] >>> a.sort() >>> a [1, 2, 3, 4] >>> a.sort(reverse=True) >>> a [4, 3, 2, 1]
5. **reverse** – Denne metoden snur rekkefølgen på elementene i listen.
>>> a = [3, 2, 4, 1] >>> a.reverse() >>> a [1, 4, 2, 3]
Merk: Det finnes også andre metoder som clear, insert og count. Du trenger ikke å forklare alle disse under et intervju. Fokuser på de metodene du bruker mest, for eksempel to eller tre.
#11. Beskriv noen vanlige metoder for strenger.
1. **split** – Denne metoden deler opp en streng i flere deler basert på et spesifisert skilletegn. Hvis du ikke oppgir noe skilletegn, vil strengen deles opp ved mellomrom. Resultatet returneres som en liste.
>>> a = "Dette er en teststreng" >>> a.split() ['Dette', 'er', 'en', 'teststreng'] >>> a = "1, 2, 3, 4, 5, 6" >>> a.split(", ") ['1', '2', '3', '4', '5', '6']
2. **join** – Denne metoden kombinerer en liste av strenger til en enkelt streng. Det første argumentet er skilletegnet som settes mellom hvert element.
>>> a = ['Dette', 'er', 'en', 'teststreng'] >>> ' '.join(a) 'Dette er en teststreng' >>> ', '.join(a) 'Dette, er, en, teststreng'
Merk: Andre metoder for strenger inkluderer: capitalize, isalnum, isalpha, isdigit, lower, upper og center.
#12. Hva er negativ indeksering i lister?
Indeksering brukes for å hente ut elementer fra lister. Normal indeksering starter fra 0. Negativ indeksering gir deg imidlertid muligheten til å hente ut elementer bakfra, fra slutten av listen. Her starter den første indeksen på -1, den neste er -2, osv.
>>> a = [1, 2, 3, 4, 5] >>> a[-1] 5 >>> a[-3] 3 >>> a[-5] 1
#13. Beskriv noen vanlige metoder for ordbøker.
1. **items** – Denne metoden returnerer en liste av tupler som inneholder nøkkel-verdi-par fra ordboken.
>>> a = {1: 'verdi1', 2: 'verdi2', 3: 'verdi3'} >>> a.items() dict_items([(1, 'verdi1'), (2, 'verdi2'), (3, 'verdi3')])
2. **pop** – Denne metoden fjerner det spesifiserte nøkkel-verdi-paret fra ordboken og returnerer verdien som ble fjernet.
>>> a = {1: 2, 2: 3} >>> a.pop(2) 3 >>> a {1: 2}
Merk: Andre metoder for ordbøker inkluderer get, keys, values og clear.
#14. Hva er slicing i Python?
Slicing er en teknikk som brukes for å hente ut delsekvenser fra en sekvensiell datatyp. Den returnerer en ny sekvens av samme type basert på de angitte argumentene. Slicing aksepterer tre argumenter: startindeks, sluttindeks og trinnstørrelse. Syntaksen er `variabel[start:end:step]`. Alle tre argumenter er valgfrie. Hvis du ikke oppgir noen argumenter, returneres hele sekvensen.
>>> a = [1, 2, 3, 4, 5] >>> a[:] [1, 2, 3, 4, 5] >>> a[:3] [1, 2, 3] >>> a[3:] [4, 5] >>> a[0:5:2] [1, 3, 5]
#15. Hvilke datatyper kan slices?
Slicing kan brukes på list, tuple og str datatyper.
#16. Hva er unpacking-operatører i Python? Hvordan brukes de?
Unpacking-operatorene i Python er * og **.
Unpacking-operatoren * brukes til å tilordne flere verdier fra en sekvensiell datatype til separate variabler samtidig.
>>> items = [1, 2, 3] >>> a, b, c = items >>> a 1 >>> b 2 >>> c 3 >>> a, *b = items >>> a 1 >>> b [2, 3]
Unpacking-operatoren ** brukes med ordbok-datatyper. Her fungerer ikke unpacking på samme måte som med sekvensielle datatyper, da den brukes for å kopiere nøkkel-verdi-par fra en ordbok til en annen.
>>> a = {1:2, 3:4} >>> b = {**a} >>> b {1: 2, 3: 4} >>> c = {3:5, 5:6} >>> b = {**a, **c} >>> b {1: 2, 3: 5, 5: 6}
Merk: For mer detaljert informasjon om disse operatorene, se relevant dokumentasjon.
Betingelser og Løkker
#17. Har Python en switch-setning?
Nei, Python har ikke en switch-setning.
#18. Hvordan implementerer du switch-funksjonalitet i Python?
Du kan oppnå switch-funksjonalitet ved hjelp av `if` og `elif` setninger.
>>> if a == 1: ... print(...) ... elif a == 2: ... print(....)
#19. Hva er `break` og `continue` setninger?
**break** – `break`-setningen avbryter utførelsen av en løkke. Utførelsen av koden vil hoppe til utsiden av løkken.
>>> for i in range(5): ... if i == 3: ... break ... print(i) ... 0 1 2
**continue** – `continue`-setningen hopper over utførelsen av den gjenværende koden i den gjeldende iterasjonen og fortsetter til neste iterasjon.
>>> for i in range(5): ... if i == 3: ... continue ... print(i) ... 0 1 2 4
#20. Når utføres koden i en `else`-blokk med `while`- og `for`-løkker?
Koden i en `else`-blokk i en `while`- eller `for`-løkke blir utført etter at alle iterasjoner i løkken er fullført. Den utføres ikke hvis løkken avbrytes med en `break`-setning.
#21. Hva er list- og ordbokforståelse?
List- og ordbokforståelse er syntaktisk sukker for for-løkker.
>>> a = [i for i in range(10)] >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> a = {i: i + 1 for i in range(10)} >>> a {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10} >>>
#22. Hvordan fungerer `range`-funksjonen?
`range`-funksjonen genererer en sekvens av tall mellom en startverdi og en stoppverdi med en spesifisert trinnstørrelse. Syntaksen er `range(start, stop[, step])`. `stop`-argumentet er obligatorisk. `start` og `step` er valgfrie, med standardverdier 0 og 1, respektivt.
>>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(1, 10)) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list(range(1, 10, 2)) [1, 3, 5, 7, 9] >>>
Funksjoner
#23. Hva er parametere og argumenter?
Parametere er navnene som er oppført i funksjonsdefinisjonen.
Argumenter er verdiene som sendes til funksjonen når den kalles.
#24. Hvilke forskjellige typer argumenter finnes i Python?
Det finnes fire hovedtyper argumenter: posisjonsargumenter, standardargumenter, nøkkelordargumenter og variable argumenter.
**Posisjonsargumenter:** Dette er de vanlige argumentene som defineres i brukerdefinerte funksjoner. Alle posisjonsargumenter må spesifiseres når funksjonen kalles.
>>> def add(a, b): ... return a + b ... >>> add(1, 2) 3 >>> add(1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: add() missing 1 required positional argument: 'b' >>>
**Standardargumenter:** Standardverdier kan gis til argumenter i funksjonsdefinisjonen. Hvis brukeren ikke oppgir en verdi for argumentet, vil funksjonen bruke standardverdien.
>>> def add(a, b=3): ... return a + b ... >>> add(1, 2) 3 >>> add(1) 4
**Nøkkelordargumenter:** Når en funksjon kalles, kan man spesifisere argumentnavnet og tilordne verdier til dem. Dette gjør det mulig å sende argumentene i en annen rekkefølge enn det som er definert i funksjonsdefinisjonen.
>>> def add(a, b): ... print("a ", a) ... print("b ", b) ... return a + b ... >>> add(b=4, a=2) a 2 b 4 6
**Variable argumenter:** Disse brukes for å samle et ubegrenset antall argumenter når man ikke vet hvor mange argumenter funksjonen vil motta. Operatorene `*` og `**` brukes i funksjonsdefinisjonen for å samle argumentene.
>>> def add(*args): ... return sum(args) ... >>> add(1, 2, 3, 4, 5) 15 >>> def dict_args(**kwargs): ... print(kwargs) ... >>> dict_args(a="verdi1", b='verdi2', c="verdi3") {'a': 'verdi1', 'b': 'verdi2', 'c': 'verdi3'}
#25. Hva er en lambdafunksjon?
Lambdafunksjoner er små, anonyme funksjoner i Python. De består av et enkelt uttrykk og kan ta inn flere argumenter.
>>> add = lambda a, b: a + b >>> add(1, 3) 4
#26. Hva er forskjellen mellom en vanlig funksjon og en lambdafunksjon?
Funksjonaliteten til en vanlig funksjon og en lambdafunksjon kan være den samme, men lambdafunksjoner krever mindre kode for en tilsvarende funksjon. Lambdafunksjoner er spesielt nyttige når det er et enkelt uttrykk som skal evalueres.
#27. Hva brukes `pass`-nøkkelordet til?
Nøkkelordet `pass` brukes for å definere en tom kodeblokk. Python tillater ikke tomme blokker, så `pass` lar deg definere en tom blokk som du kan fylle ut senere.
>>> def add(*args): ... ... File "<stdin>", line 3 ^ IndentationError: expected an indented block >>> def add(*args): ... pass ... >>>
#28. Hva er en rekursiv funksjon?
En funksjon som kaller seg selv er kjent som en rekursiv funksjon.
Hva er pakkeoperatorer i Python? Hvordan brukes de?
Pakkeoperatorene brukes til å samle flere argumenter i funksjoner. De er også kjent som variable argumenter.
Merk: For mer informasjon om pakkeoperatorer i Python, se relevant dokumentasjon.
OOP i Python
#29. Hvilket nøkkelord brukes for å opprette klasser i Python?
Nøkkelordet `class` brukes for å opprette klasser i Python. Det er vanlig praksis å bruke PascalCase for å navngi klasser.
>>> class Car: ... pass ...
#30. Hvordan instansierer man en klasse i Python?
En forekomst av en klasse kan opprettes ved å kalle klassen på samme måte som man kaller en funksjon. Du kan sende inn attributter som objekter, på samme måte som du sender argumenter til en funksjon.
>>> class Car: ... def __init__(self, color): ... self.color = color ... >>> red_car = Car('red') >>> red_car.color 'red' >>> green_car = Car('green') >>> green_car.color 'green' >>>
#31. Hva er `self` i Python?
`self` representerer objektet av klassen. Den brukes for å få tilgang til objektets attributter og metoder inne i klassen.
#32. Hva er `__init__`-metoden?
`__init__` er konstruktørmetoden, som ligner på konstruktører i andre OOP-språk. Den kjøres umiddelbart når et objekt av klassen opprettes, og brukes for å initialisere objektets attributter.
#33. Hva er docstring i Python?
Dokumentasjonsstrenger, eller docstrings, brukes for å dokumentere en kodeblokk. De kan også brukes som flerlinjekommentarer. Docstrings brukes gjerne i metoder for å beskrive hva de gjør. Du kan se docstringene til en metode med `help()`-metoden.
>>> class Car: ... def __init__(self, color): ... self.color = color ... ... def change_color(self, updated_color): ... """Denne metoden endrer fargen på bilen""" ... self.color = updated_color ... >>> car = Car('red') >>> help(car.change_color) Help on method change_color in module __main__: change_color(updated_color) method of __main__.Car instance Denne metoden endrer fargen på bilen >>>
#34. Hva er dunder- eller magiske metoder?
Metoder som har to understreker som prefiks og suffiks, som `__str__`, `__len__` og `__setitem__`, kalles dunder- eller magiske metoder. Disse brukes i hovedsak for å overstyre eksisterende metoder.
>>> class Car: ... def __str__(self): ... return "Dette er en Car-klasse" ... >>> car = Car() >>> print(car) Dette er en Car-klasse >>>
Merk: Det finnes mange andre metoder som kan overstyres. Disse er spesielt nyttige når du ønsker å tilpasse koden mer i dybden. Se dokumentasjonen for mer informasjon.
#35. Hvordan implementerer du arv i Python?
Du kan implementere arv ved å sende foreldreklassen som et argument til barneklassen. Deretter kan du kalle `__init__`-metoden fra foreldreklassen i barneklassen.
>>> class Animal: ... def __init__(self, name): ... self.name = name ... >>> class Dog(Animal): ... def __init__(self, name): ... super().__init__(name) ... >>> doggy = Dog('Tommy') >>> doggy.display() Tommy >>>
#36. Hvordan får du tilgang til foreldreklassen i barneklassen i Python?
Du kan bruke `super()` som refererer til foreldreklassen inne i barneklassen. Dette gir deg tilgang til attributter og metoder i foreldreklassen.
Diverse
#37. Hvordan bruker du enkeltlinje- og flerlinjekommentarer i Python?
Du bruker `#` for enkeltlinjekommentarer og trippel enkle anførselstegn (`»’kommentar»’`) eller trippel doble anførselstegn (`»»»kommentar»»»`) for flerlinjekommentarer.
#38. Hva er et objekt i Python?
I Python er alt et objekt. Alle datatyper, funksjoner og klasser er objekter.
#39. Hva er forskjellen mellom `is` og `==`?
Operatoren `==` sjekker om to objekter har samme verdi eller ikke, mens operatoren `is` sjekker om to objekter refererer til den samme minneplasseringen.
>>> a = [] >>> b = [] >>> c = a >>> a == b True >>> a is b False >>> a is c True >>>
#40. Hva er grunn og dyp kopi?
**Grunn kopi:** Den lager en kopi av objektet, men referansene til objektene inne i kopien er de samme som i det originale objektet. Hvis du endrer en av objektreferansene i kopien, vil det påvirke det opprinnelige objektet.
Metoden `copy` fra `copy`-modulen brukes for å lage en grunn kopi.
>>> from copy import copy >>> a = [1, [2, 3]] >>> b = copy(a) >>> a[1].append(4) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3, 4]]
**Dyp kopi:** Den kopierer verdiene til det opprinnelige objektet rekursivt inn i det nye objektet. Du må bruke `deepcopy`-funksjonen fra `copy`-modulen for å lage en dyp kopi. En endring i et objekt vil ikke påvirke det andre objektet.
>>> from copy import deepcopy >>> a = [1, [2, 3]] >>> b = deepcopy(a) >>> a[1].append(4) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3]] >>> b[1].append(5) >>> a [1, [2, 3, 4]] >>> b [1, [2, 3, 5]] >>>
#41. Hva er iteratorer?
Iteratorer er objekter i Python som husker deres iterasjonstilstand. De initialiserer dataene med `__iter__`-metoden og returnerer neste element ved hjelp av `__next__`-metoden. Du kan konvertere en sekvensiell datatype til en iterator med den innebygde `iter`-metoden.
>>> a = [1, 2] >>> iterator = iter(a) >>> next(iterator) 1 >>> next(iterator) 2 >>> next(iterator) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>