Zmienna name ma wartość "Ola". Co wypisze print(f"Cześć, {name}!")?
Część 1 · Po co funkcja
Ten sam przepis zapisany raz
Funkcja to nazwany kawałek programu, który robi jedną rzecz. Zapisujecie go raz, a potem wystarczy podać jego nazwę, żeby wykonał się od nowa. Tak samo działa przepis w książce kucharskiej: opis jest jeden, a naleśniki smażycie wiele razy.
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 121 (8.2 Podzielność liczb, pojęcie z marginesu: funkcja)
Część 1 · Budowa funkcji
Nagłówek, wcięty blok i słowo return
def function_name(parameters):
statements
return result
Nagłówek: słowo def, nazwa, parametry w nawiasie, dwukropek.
Blok: instrukcje wcięte o 4 spacje, tak jak pod if.
return: oddaje wynik temu, kto funkcję wywołał.
def area_of_square(a):
return a * a
print(area_of_square(5))
print(area_of_square(12))
25
144
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 226 (dodatek 7 Podstawowe typy instrukcji, budowa funkcji)
Część 2 · Definicja kontra wywołanie
Zapisanie przepisu to jeszcze nie gotowanie
Funkcja bez wywołania nie robi nic, tak jak przepis, którego nikt nie użył. Ta sama definicja obsłuży area_of_square(5), area_of_square(12) i każdą inną liczbę.
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 121–122 (8.2 Podzielność liczb, definicja funkcji i jej wywołanie)
Część 2 · Parametr i argument
Nazwa w definicji, wartość w wywołaniu
def add(a, b):
return a + b
print(add(2, 3))
print(add(10, 7))
5
17
Parametr to nazwa w nawiasie definicji: tu a i b. To pusta szufladka, która czeka na wartość.
Argument to wartość podana w wywołaniu: tu 2 i 3, potem 10 i 7.
Pierwszy argument trafia do pierwszego parametru, drugi do drugiego.
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions) · Podręcznik Informatyka na czasie 2 (Nowa Era), s. 122–123 (8.2 Podzielność liczb, pojęcie z marginesu: parametry formalny i aktualny funkcji)
Część 2 · Instrukcja return
Wypisać to nie to samo co oddać
def show_hello():
print("Cześć!")
result = show_hello()
print(result)
Cześć!
None
print pokazuje coś człowiekowi na ekranie. return oddaje wartość programowi, który funkcję wywołał, więc da się ją zapamiętać w zmiennej albo policzyć dalej.
Funkcja bez return też się wykonuje, ale oddaje None, czyli „nic”. Dlatego result ma wartość None.
W praktyce: programiści Pythona mają wspólny zbiór zaleceń PEP 8. Nazwy funkcji pisze się w nim małymi literami, a słowa rozdziela podkreśleniem, na przykład total_price.
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions) · ciekawostka: peps.python.org/pep-0008/ (Function and Variable Names)
Część 3 · Zmienna lokalna
Co powstaje w funkcji, w funkcji zostaje
def total_price(price, count):
total = price * count
return total
print(total_price(3, 4))
print(total)
12
Traceback (most recent call last):
File "prices.py", line 6, in <module>
print(total)
NameError: name 'total'
is not defined
Zmienna total powstaje dopiero przy wywołaniu funkcji i znika, gdy funkcja się kończy. Taką zmienną nazywamy lokalną. Reszta programu jej nie widzi, dlatego print(total) kończy się błędem NameError.
docs.python.org, The Python Tutorial, rozdz. 4.8 (Defining Functions, local symbol table)
Napis w potrójnych cudzysłowach tuż pod nagłówkiem to docstring, czyli opis funkcji. Python zapamiętuje go i oddaje przez function_name.__doc__.
W praktyce: z docstringów gotowe narzędzia składają dokumentację całego programu, więc firmy wymagają ich w każdej funkcji.
docs.python.org, The Python Tutorial, rozdz. 4.9.7 (Documentation Strings)
Ćwiczenie · przy komputerze · 12 minut
Ćwiczenie: trzy własne funkcje
Załóż plik functions.py. Po każdym zadaniu uruchom program i sprawdź, czy wynik zgadza się z tym, co sam policzyłeś.
Napisz funkcję cube z jednym parametrem, która oddaje sześcian liczby. Wywołaj ją dla 3 i dla 7.
Napisz funkcję average z dwoma parametrami, która oddaje średnią dwóch liczb. Wywołaj ją dla 4 i 7.
Napisz funkcję shout, która dostaje imię i oddaje je wielkimi literami z trzema wykrzyknikami. Wywołaj ją dla "ola".
Wskazówka
Gdy Python zgłosi IndentationError, sprawdź wcięcie w bloku funkcji: cztery spacje, w każdej linii tyle samo. Gdy program nic nie wypisuje, brakuje wywołania funkcji w print.
Sprawdzenie
Trzy pytania na koniec
Czym różni się definicja funkcji od jej wywołania?
Czym różni się print w funkcji od return w funkcji?
Dlaczego zmiennej utworzonej wewnątrz funkcji nie da się użyć poza nią?
Podsumowanie
A jak to wygląda w produkcji?
Na lekcji
W produkcji
Status
Kilka funkcji w jednym pliku
Funkcje grupuje się w moduły, a program dołącza je poleceniem import
rozszerzane
Nazwa area_of_square
Zespoły trzymają się jednego zapisu z zaleceń PEP 8: małe litery i podkreślenia
standard
Docstring dla siebie
Narzędzia składają z docstringów dokumentację całego projektu
codziennie
return oddaje jedną wartość
Funkcja może oddać kilka wartości naraz, jak divmod(a, b): iloraz i resztę
rozszerzane
docs.python.org, The Python Tutorial, rozdz. 6 (Modules) i rozdz. 4.9.7 (Documentation Strings) · peps.python.org/pep-0008/ (Function and Variable Names) · docs.python.org, Built-in Functions (divmod)