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
greetactionFUNKCJA OBIEKTOWA
greet i action to dwie nazwy tego samego obiektu funkcji, tak jak w przypadku każdego innego obiektu (Rozdział 3)
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))
słowolen(word)klucz sortowaniakolejnośćtym kluczem
sorted() wywołuje funkcję przekazanej len dla każdego elementu, aby uzyskać klucz sortowania
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
Otwórz praktykę →