Använda funktionsargument i Python
Nu när du vet hur du skapar en funktion utan indata är nästa steg att skapa funktioner som kräver ett argument. Med argument blir funktionerna mer flexibla eftersom de kan göra mer och villkorsstyra vad de gör.
Kräver ett argument
Om du pilottestar ett raketskepp är en funktion utan nödvändiga indata som en dator med en knapp för att berätta tiden. Om du trycker på knappen visar en datoriserad röst tiden. Men en nödvändig indata kan vara ett mål för att beräkna reseavstånd. Obligatoriska indata kallas argument för funktionen.
Om du vill kräva ett argument placerar du det inom parenteserna:
def distance_from_earth(destination):
if destination == "Moon":
return "238,855"
else:
return "Unable to compute to that destination"
Prova att distance_from_earth()
anropa funktionen utan argument:
distance_from_earth()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: distance_from_earth() missing 1 required positional argument: 'destination'
Python genererar TypeError
med ett felmeddelande som säger att funktionen kräver ett argument med namnet destination
. Om raketskeppets dator uppmanas att beräkna resavståndet med ett mål bör det fråga om ett mål är ett krav. Exempelkoden har två sökvägar för ett svar, en för månen och den andra för allt annat. Använd månen som indata för att få ett svar:
distance_from_earth("Moon")
238,855
Eftersom det finns ett catch-all-villkor kan du prova att använda någon annan sträng som mål för att kontrollera det beteendet:
distance_from_earth("Saturn")
Unable to compute to that destination
Flera obligatoriska argument
Om du vill använda flera argument måste du separera dem med ett kommatecken. Nu ska vi skapa en funktion som kan beräkna hur många dagar det tar att nå ett mål, givet avstånd och en konstant hastighet:
def days_to_complete(distance, speed):
hours = distance/speed
return hours/24
Använd nu avståndet från jorden till månen för att beräkna hur många dagar det skulle ta att komma till månen med en hastighetsgräns på 75 miles per timme:
days_to_complete(238855, 75)
132.69722222222222
Funktioner som argument
Du kan använda värdet för days_to_complete()
funktionen och tilldela den till en variabel och sedan skicka den till round()
(en inbyggd funktion som avrundar till närmaste heltal) för att få ett heltal:
total_days = days_to_complete(238855, 75)
round(total_days)
133
Ett användbart mönster är dock att skicka funktioner till andra funktioner i stället för att tilldela det returnerade värdet:
round(days_to_complete(238855, 75))
133
Dricks
Även om det är användbart att skicka funktioner direkt till andra funktioner som indata, finns det potential för minskad läsbarhet. Det här mönstret är särskilt problematiskt när funktionerna kräver många argument.