Din första funktion

Att samla steg under ett namn

Listan gav dig ett namn för många värden. föremål är en enda etikett på femtio saker, och du slapp femtio variabler.

Funktionen gör samma sak med kod. I stället för att skriva samma sex rader tre gånger i ditt program ger du raderna ett namn, och sedan använder du namnet. Det är därför de två hör ihop i det här temat: listan samlar data under ett namn, funktionen samlar steg.

Vinsten är inte att du sparar tangenttryckningar. Den är att koden får ett ställe att bo på. Ska utskriften av en statusrad ändras finns den på ett ställe, inte tre, och ändrar du den ändras alla tre.

def, din första funktion

Du har anropat funktioner sedan dag ett: print(), input(), int(), range(), len(). Någon definierade dem. Nu definierar du dina egna.

En Funktion Ett namngivet kodblock som kan anropas från andra ställen i programmet. Definieras med def, anropas med namn(). Gör det möjligt att packa ett specifikt ansvar i ett återanvändbart block med ett tydligt gränssnitt. Se: Din första funktion definieras med nyckelordet def, ett namn, parenteser och ett kolon. Allt som tillhör funktionen är indenterat under definitionen:

Editor

Redo.

def hälsa(): skapar funktionen, den kör ingenting. hälsa() kör den. Skillnaden mellan de två raderna är skillnaden mellan att rita en ritning och att sätta upp väggen.

Ta bort parenteserna på en av de två sista raderna, så att det bara står hälsa, och kör igen. Utskriften försvinner. Utan parenteser refererar du bara till funktionen, du ber den inte att köra. Den skillnaden ser oskyldig ut nu, men den blir helt avgörande i Fönsterhanteraren: när du kopplar en funktion till en knapp är det just en referens du vill lämna, inte ett anrop, så att funktionen körs när knappen klickas och inte direkt.

Parametrar, indata till funktionen

En funktion utan parametrar gör samma sak varje gång. Parameter och argument En parameter är variabelnamnet i def-raden, funktionens deklarerade indata. Ett argument är det faktiska värdet som skickas in vid anropet. def hälsa(namn): namn är parametern. hälsa("Kalle"): "Kalle" är argumentet. Se: Din första funktion låter dig skicka in värden som funktionen arbetar med:

Editor

Redo.

namn i def-raden är parametern, funktionens deklarerade indata. Inuti funktionen fungerar den som en vanlig lokal variabel. "Kalle" i anropet är argumentet, det faktiska värdet som skickas in. I praktiken används orden ofta synonymt, men distinktionen finns.

Lägg till ett tredje anrop med ditt eget namn. Ta sedan bort "Kalle" ur det första anropet, så att det står hälsa(), och kör: Python vägrar med TypeError och säger rakt ut att ett argument saknas. Funktionen har lovat att den behöver ett namn.

En funktion kan ta flera parametrar, separerade med komma:

def visa_status(namn, hp, tur):
    print(f"--- Tur {tur} ---")
    print(f"{namn} har {hp} HP kvar.")

Uppgift: Strukturera Brawl

Öppna din brawl/main.py från Milstolpe: Brawl. Du skriver ingenting nytt i den här uppgiften. Du gör om det som redan finns så att det blir lättare att läsa, och det kallas Refaktorering Processen att strukturera om befintlig kod utan att förändra dess yttre beteende. Förbättrar läsbarhet, underhållbarhet och struktur. En välrefaktorerad funktion gör samma sak som den gjorde tidigare, men på ett sätt som är lättare att förstå och ändra. Se: Slutprojekt: leverans .

  1. Spara först en kopia av filen som main_original.py i samma mapp. Den rör du inte sedan, den finns för att du ska kunna lägga de två versionerna bredvid varandra på slutet.

  2. Leta upp minst två kodblock som gör samma sak på olika ställen, till exempel att skriva ut en statusrad eller att slå fram ett skadevärde. Skriv en funktion för varje, med de parametrar den behöver.

  3. Flytta koden till funktionerna och ersätt de ursprungliga kodblocken med funktionsanrop. Kör programmet och bekräfta att det beter sig exakt som förut.

  4. Skapa funktionen visa_status(namn, hp) som skriver ut en formaterad statusrad. Anropa den efter varje tur i stället för att skriva ut direkt.

  5. Öppna main_original.py och main.py sida vid sida och räkna raderna i båda. Blev filen kortare, längre eller ungefär lika lång?

  6. Gå till Source Control-panelen i VS Code, stagea båda filerna, skriv commit-meddelandet "Refaktorering: extraherade funktioner" och pusha.

Vad händer om

Ändra visa_status så att den skriver ut på ett nytt sätt, till exempel med en ram av bindestreck runt raden. Hur många ställen i programmet behövde du ändra för att alla statusrader skulle se likadana ut?

Motivera & reflektera

Motivera varför du valde just de kodblocken. Vad i koden fick dig att se att de hörde ihop, och vad blev lättare att ändra efteråt?