2.14. Definiera funktioner¶
En funktion paketerar ett kodblock under ett namn så att det kan anropas från många ställen. Överallt där en beräkning, åtgärd eller utformad arbetsuppgift dyker upp mer än en gång gör en funktion det till en enda namngiven sak.
Nyckelordet är def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Utdata:
hello, Alice
hello, Bob
Raden som börjar med def är definitionen – den skapar funktionen men kör inte kroppen. Att anropa greet("Alice") är det som kör det indenterade blocket.
2.14.1. Parametrar och argument¶
Namnen i parenteserna på def-raden är parametrar – platshållare för värden som anroparen ska ange. De faktiska värden som skickas in är argument. En funktion kan ta noll eller fler parametrar:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Ett anrop med fel antal argument höjer TypeError direkt.
2.14.2. return¶
En return-sats avslutar funktionen omedelbart och lämnar tillbaka ett värde till anroparen:
def absolute(x):
if x < 0:
return -x
return x
En funktion som aldrig når en return (eller har en naken return utan värde) returnerar None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
En funktion kan ha flera return-satser; den första som nås vinner, och resten av kroppen hoppas över.
2.14.2.1. Returnera flera värden¶
Python returnerar ett objekt per anrop, men det objektet kan vara en tuple – och anroparen kan packa upp den på stället:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Parenteserna runt returvärdet är valfria; return a, b och return (a, b) är samma sak.
2.14.3. Docstrings¶
En stränglitteral som placeras som den första satsen i en funktionskropp är en docstring. Den lagras på funktionsobjektet och är det som help() visar:
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
IDE:n visar docstrings i verktygstips när markören hålls över funktionsnamnet, så även en sammanfattning på en rad lönar sig. Trippelciterade strängar tillåter docstringen att sträcka sig över flera rader när mer detaljer är användbara.
2.14.4. Namngivningskonventioner¶
Funktionsnamn använder snake_case – gemena ord åtskilda av understreck. Namnet bör beskriva vad funktionen gör:
Bra:
read_temperature,parse_header,is_valid.Undvik:
do_stuff,handle1,temp_func.
Ett inledande understreck (_helper) markerar en funktion som intern i sin modul. Konventionen respekteras allmänt men upprätthålls inte av Python.