Göm menyn

Metoder

All information som en funktion behöver för att utföra sitt uppdrag kommer genom argumenten.

Metoder

Metoder är specialiserade funktioner som hör till en viss datatyp. Man kan inte köra dem utan att ha ett objekt av rätt typ. Det ser ut på följande sätt:

Vi kommer inte att lära oss att skriva egna metoder i den här kursen, men vi kan använda de inbyggda metoderna för till exempel strängar.

Objekt

Ett sätt att organisera datastrukturer och dess funktioner är att bilda objekt. Ett objekt består dels av data (medlemar) samt de metoder som kan utföras på den.

Python stödjer objektorientering, men tvingar oss inte att använda det. Vi kommer inte att ta upp objektorientering, bortsett från att vi kommer att använda en del av de objekt som redan finns i Python.

OBS: Många metoder returnerar inget värde utan utför endast en handling på sitt objekt.

Om man ser något i programkoden på något av följande sätt så vet man att det är något objekt som används.

Dokumentation

Hjälp

För att se en lista med tillgängliga metoder för ett objekt kan du skriva help(object) i interpretatorn. De metoder som börjar och slutar med __ är metoder som överskrider vanliga operationer. Tryck q för att komma tillbaks till interpretatorn.

Dokumentation

Dokumentationsexempel

Under help(list) hittar vi denna förklaring på metoden index

L står för objektet metoden körs på, argument inom hakparenteser är frivilliga argument. Efter pilen visas datatypen som returvärdet har, sedan följer en kort förklaring av metoden.

Några strängmetoder:

Dokumentation

  • S.find(sub): Returnerar indexet till den första förekomsten av strängen sub i S. -1 returneras om ingen förekomst finns.

  • S.count(sub): Returnerar antalet förekomster av strängen sub i S.

  • S.replace(old, new): Returnerar en kopia av S där alla förekomster av old bytts ut mot new.

  • S.split(sep, maxsplit): Returnerar en lista med ord i S. Om sep är given används den som separator mellan ord, annars används blanksteg. Om maxsplit är given kommer metoden endast dela upp strängen maxsplit gånger.

  • S.strip(): Returnerar en kopia av S där alla blanksteg (white spaces) är borttagna i början och slutet. Metoden S.rstrip() tar endast bort i slutet och metoden S.lstrip() tar endast bort i början.

  • S.upper(): Returnerar en kopia av S där alla bokstaver är versaler.

  • S.title(): Returnerar en kopia av S där varje ord börjar med versal och följs av gemener.

Några listmetoder

Dokumentation

  • L.append(obj): Lägger till obj till slutet av listan.

  • L.index(obj): Returnerar det första indexet till obj i L.

  • L.insert(i, obj): Lägger till obj före index i i L. Förskjuter resten av listan ett steg.

  • L.count(obj): Returnerar antalet förekomster av obj i L.

  • L.remove(obj): Tar bort den första förekomsten av obj i L.

  • L.reverse(): L blir baklänges.

  • L.sort(): Sorterar L.

  • L.pop(i): Tar bort och returnerar elementet med index i i L. Om i inte är givet tas det sista elementet i L bort och returneras.

Listmetoders felhantering

Hur hanterar listor att man skickar in felaktiga parametrar?

Se Python-dokumentationen för att se vilket undantag en metod kan kasta.

Ta bort element ur en lista

Dokumentation

Exempel: Destruktiva funktioner

Nu ska vi skriva en variant på funktionen remove. Funktionen ska ta bort alla förekomster av ett element i en rak lista (vi ignorerar eventuella underlistor). Funktionen ska vara destruktiv, vi ska alltså inte bygga upp en ny lista som resultat utan modifiera den listan vi skickar in genom att använda metoderna pop() och remove().

Den ska fungera så här:

Vi ska titta på flera olika sätt att lösa problemet.

Lösning 1

Vi räknar hur många gånger x förekommer och anropar sedan remove så många gånger.

Fördelen med den här lösningen är att den använder inbyggda metoder och programeraren behöver inte skriva mycket kod. En nackdel med lösningen är att den kommer att behöva gå igenom listan många gånger, då både count och remove går igenom listan.

Lösning 2

Gå igenom listan element för element. För varje element som matchar, anropa pop().

Den absolut största nackdelen med det här förslaget är att det inte kommer att fungera. Eftersom vi tar bort element kommer listan att vara för kort när loopen kommer till det som den tror är slutet. Detta leder till ett IndexError.

Lösning 3

Gå igenom listan element för element, baklänges. Anropa pop() för varje element som matchar.

Fördelen med den här är att den faktiskt fungerar. Eftersom vi räknar baklänges kommer elementen försvinna från den delen av listan vi är klara med. Nackdelen är att det kan vara lite bökigt att räkna baklänges.

Lösning 4

Gå igenom listan element för element, men kolla längden på listan varje varv så att vi inte försöker nå index som ligger utanför listan. Anropa pop() för varje element som matchar.

Fördelen med denna är att den kan upplevas som mer lättläst än de andra lösningarna då den är mer "rakt på". Nackdelen är att vi själva måste kolla längden på listan varje varv, och uppdatera variabeln i själva.

Tillhörande quiz

Finnes här


Sidansvarig: Peter Dalenius
Senast uppdaterad: 2016-08-15