Funkcje częściowe
Używaj functools.partial
Funkcje częściowe to bezpłatna lekcja Python Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Python Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Python Academy zawiera 4 lekcji w sumie.
Czym jest partial?
functools.partial tworzy nową funkcję, w której niektóre argumenty istniejącej funkcji są już uzupełnione. To jak wstępne podanie argumentów, dzięki czemu wynikową funkcję można wywołać z mniejszą ich liczbą.
Element należy zaimportować za pomocą from functools import partial.
from functools import partial
def power(base, exp):
return base ** exp
square = partial(power, exp=2)
print(square(5))Ustalanie argumentów pozycyjnych
Argumenty pozycyjne przekazane do partial wypełniają parametry funkcji od lewej strony. Pozostałe argumenty są podawane podczas wywoływania funkcji partial.
from functools import partial
def multiply(a, b):
return a * b
double = partial(multiply, 2)
print(double(10))
print(double(50))Ustalanie argumentów nazwanych
Argumenty nazwane przekazane do partial stają się wartościami domyślnymi, które nadal można zastąpić w chwili wywołania.
from functools import partial
def greet(name, greeting='Hello'):
return greeting + ', ' + name
hola = partial(greet, greeting='Hola')
print(hola('Ada'))
print(hola('Bob', greeting='Hey'))Funkcje partial z funkcjami wbudowanymi
Funkcje wbudowane również można częściowo skonfigurować za pomocą partial. W tym przykładzie na podstawie int tworzymy parser liczb całkowitych o podstawie 2.
from functools import partial
binary = partial(int, base=2)
print(binary('1010'))
print(binary('1111'))Przejrzystsze funkcje zwrotne
Funkcje partial świetnie sprawdzają się jako funkcje zwrotne, gdy trzeba przekazać funkcję bez argumentów lub z jednym argumentem, ale chce się wcześniej przygotować kontekst.
from functools import partial
def log(level, message):
return '[' + level + '] ' + message
error = partial(log, 'ERROR')
print(error('disk full'))Funkcje partial w map
Funkcja partial doskonale pasuje do funkcji wyższego rzędu, takich jak map, ustalając jeden argument, podczas gdy drugi zmienia się dla każdego elementu.
from functools import partial
def add(a, b):
return a + b
add10 = partial(add, 10)
print(list(map(add10, [1, 2, 3])))Sprawdzanie funkcji partial
Obiekt partial udostępnia opakowaną funkcję za pośrednictwem .func, ustalone argumenty pozycyjne za pośrednictwem .args, a ustalone argumenty nazwane za pośrednictwem .keywords.
from functools import partial
def f(a, b, c):
return (a, b, c)
p = partial(f, 1, c=3)
print(p.func.__name__)
print(p.args)
print(p.keywords)Łączenie funkcji partial
Funkcję partial można utworzyć na podstawie innej funkcji partial, dodając kolejne ustalone argumenty krok po kroku.
from functools import partial
def volume(l, w, h):
return l * w * h
base = partial(volume, 2)
slab = partial(base, 3)
print(slab(4))partial a lambda
lambda może wykonać to samo zadanie, ale partial jest często przejrzystsze przy ustalaniu argumentów i udostępnia opakowaną funkcję do introspekcji.
from functools import partial
def power(base, exp):
return base ** exp
cube_p = partial(power, exp=3)
cube_l = lambda b: power(b, 3)
print(cube_p(2), cube_l(2))Praktyczny przykład: zaokrąglanie
Utwórz funkcję zaokrąglającą do dwóch miejsc po przecinku, częściowo konfigurując wbudowaną funkcję round.
from functools import partial
round2 = partial(round, ndigits=2)
print(round2(3.14159))
print(round2(2.71828))partialmethod dla klas
Powiązane functools.partialmethod działa podobnie w przypadku metod wewnątrz definicji klasy, wstępnie uzupełniając argumenty metody.
from functools import partialmethod
class Light:
def set(self, state):
self.state = state
return state
on = partialmethod(set, True)
off = partialmethod(set, False)
l = Light()
print(l.on())
print(l.off())Szybki test
Co robi functools.partial?
Podsumowanie: funkcje partial
Element functools.partial:
- tworzy nową funkcję z wcześniej uzupełnionymi argumentami pozycyjnymi lub nazwanymi;
- pozwala zastępować ustalone wartości domyślne argumentów nazwanych w chwili wywołania;
- idealnie nadaje się do funkcji zwrotnych,
mapi ograniczania powtórzeń; - udostępnia
.func,.argsi.keywords, a także ma wariant metody o nazwiepartialmethod.
from functools import partial
add = lambda a, b: a + b
plus1 = partial(add, 1)
print(plus1(41))Często zadawane pytania
Czy lekcja „Funkcje częściowe” jest bezpłatna?
Tak — pełny tekst „Funkcje częściowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Python Academy, przejdź na CoddyKit PRO. Kurs Python Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Funkcje częściowe”?
Używaj functools.partial Ćwiczysz Python Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Python Academy?
Nie wymagamy żadnego doświadczenia. Python Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Funkcje częściowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Python Academy?
Tak. Każda lekcja Python Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.