2.14. Definiowanie funkcji¶
Funkcja opakowuje blok kodu pod nazwą, dzięki czemu można go wywołać z wielu miejsc. Wszędzie tam, gdzie obliczenie, działanie lub określony fragment pracy pojawia się więcej niż raz, funkcja zamienia go w jedną nazwaną rzecz.
Słowem kluczowym jest def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Wyjście:
hello, Alice
hello, Bob
Wiersz zaczynający się od def to definicja – tworzy funkcję, ale nie uruchamia jej ciała. To wywołanie greet("Alice") uruchamia wcięty blok.
2.14.1. Parametry i argumenty¶
Nazwy w nawiasach w wierszu def to parametry – symbole zastępcze dla wartości, które dostarczy wywołujący. Faktycznie przekazane wartości to argumenty. Funkcja może przyjmować zero lub więcej parametrów:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Wywołanie z niewłaściwą liczbą argumentów natychmiast zgłasza TypeError.
2.14.2. return¶
Instrukcja return natychmiast kończy funkcję i przekazuje wartość z powrotem do wywołującego:
def absolute(x):
if x < 0:
return -x
return x
Funkcja, która nigdy nie osiąga return (lub ma samo return bez wartości), zwraca None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
Funkcja może mieć kilka instrukcji return; wygrywa pierwsza osiągnięta, a reszta ciała jest pomijana.
2.14.2.1. Zwracanie wielu wartości¶
Python zwraca jeden obiekt na wywołanie, ale tym obiektem może być tuple – a wywołujący może rozpakować go na miejscu:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Nawiasy wokół zwracanej wartości są opcjonalne; return a, b i return (a, b) są tym samym.
2.14.3. Docstringi¶
Literał łańcuchowy umieszczony jako pierwsza instrukcja ciała funkcji to docstring. Jest przechowywany w obiekcie funkcji i jest tym, co wyświetla help():
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
IDE pokazuje docstringi w dymkach, gdy kursor najedzie na nazwę funkcji, więc nawet jednowierszowe podsumowanie się opłaca. Łańcuchy w potrójnych cudzysłowach pozwalają docstringowi obejmować wiele wierszy, gdy przydatne są większe szczegóły.
2.14.4. Konwencje nazewnictwa¶
Nazwy funkcji używają snake_case – małe litery oddzielone podkreśleniami. Nazwa powinna opisywać, co funkcja robi:
Dobre:
read_temperature,parse_header,is_valid.Unikaj:
do_stuff,handle1,temp_func.
Wiodące podkreślenie (_helper) oznacza funkcję jako wewnętrzną dla jej modułu. Konwencja jest szeroko respektowana, ale nie jest egzekwowana przez Pythona.