Rozdział 13 · Automatyzacja z funkcjami
Funkcje jako obiekty
Funkcja — taki sam obiekt jak lista lub łańcuch znaków: można ją zapisać pod inną nazwą, umieścić w słownik, przekazać innej funkcji.
Funkcję można zapisać pod inną nazwą
Wróćmy do rozróżnienia z §13.2 — greet oraz
greet() — i pójdźmy o krok dalej:
funkciya_kak_obekt.py
def greet(name):
return f"Cześć, {name}"
action = greet
print(action("Anna")) #Hello Anna
To samo aliasing, co zawsze
action = greet nie kopiuje funkcji ani nie tworzy drugiej funkcji — obie nazwy wskazują na ten sam obiekt funkcji. Funkcje w Python to obiekty pierwszej klasy: Mogą być przechowywane w zmiennych, umieszczane w kolekcjach, przekazywane innym funkcjom — tak jak inne wartości.Cechy w kolekcjach
funkcii_v_slovare.py
def double(x):
return x * 2
def square(x):
return x ** 2
operations = {
"double": double,
"square": square,
}
operation = operations["square"]
result = operation(5)
print(result) # 25
Słownik + Rozdział 11
operations jest zwykłym słownik (Rozdział 11), który po prostu przechowuje nie liczby ani łańcuch znaków, lecz obiekty funkcji.Przekazywanie funkcji jako argumentu
Już to zrobiłeś, nawet o tym nie myśląc:
sorted_key.py
words = ["python", „I”, „programowanie”]
print(sorted(words, key=len))
len jest funkcją OBIEKTOWĄ, a nie wynikiem jej wywołania
key=len przekazuje samą funkcję len — BEZ nawiasów. sorted() sama to nazwie len(...) dla każdego elementu, gdy przyjdzie czas na porównanie. Jeśli piszesz key=len() byłaby próbą wywołania len teraz, bez argumentu, co spowoduje błąd.Termin: funkcja wyższego rzędu
Funkcja, która przyjmuje inną funkcję jako argument (jak sorted())
lub zwraca funkcję (jako make_greeter() od §13.13), nazywa się
funkcję wyższego rzędu. Specjalna teoria funkcjonalna
Nie ma tu potrzeby programowania — wystarczy rozpoznać ten wzorzec, gdy się pojawi.
Praktyka: funkcje jako obiekty pierwszej klasy
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji