Szukaj…


Wprowadzenie

Jak zapewne wiesz, jeśli pochodzisz ze szkoły OOP, specjalizowanie się w klasie abstrakcyjnej i korzystanie z niej jest praktyką, o której powinieneś pamiętać przy pisaniu kodu.

Co jeśli mógłbyś zdefiniować funkcję abstrakcyjną i specjalizować ją w celu tworzenia różnych wersji? Uważa to za rodzaj funkcji Dziedziczenie, w której łączone są określone parametry, aby były niezawodne w określonym scenariuszu.

Składnia

  • częściowe (funkcja, ** params_you_want_fix)

Parametry

Param Detale
x liczba do podniesienia
y wykładnik potęgi
podnieść funkcja do specjalizacji

Uwagi

Jak stwierdzono w dokumencie Python, funools.partial :

Zwraca nowy obiekt częściowy, który po wywołaniu będzie zachowywał się jak wywołany func z argumentami pozycyjnymi argumenty i słowa kluczowe argumenty. Jeśli do wywołania zostanie dostarczonych więcej argumentów, zostaną one dołączone do argumentów. Jeśli podano dodatkowe argumenty słów kluczowych, rozszerzają one i zastępują słowa kluczowe.

Sprawdź ten link, aby zobaczyć, w jaki sposób można wdrożyć częściowe .

Podnieś moc

Załóżmy, że chcemy podnieść x do liczby y .

Napisałbyś to jako:

def raise_power(x, y):
    return x**y

Co jeśli Twoja wartość y może przyjąć skończony zestaw wartości?

Załóżmy, że y może być jednym z [3,4,5] i powiedzmy, że nie chcesz oferować użytkownikowi końcowemu możliwości korzystania z takiej funkcji, ponieważ jest ona bardzo intensywna obliczeniowo. W rzeczywistości sprawdzisz, czy pod warunkiem, że y przyjmie prawidłową wartość i przepiszesz swoją funkcję jako:

def raise(x, y):
    if y in (3,4,5):
        return x**y
    raise NumberNotInRangeException("You should provide a valid exponent")

Niechlujny? Użyjmy abstrakcyjnego formularza i specjalizujmy go we wszystkich trzech przypadkach: zaimplementujmy je częściowo .

from functors import partial
raise_to_three = partial(raise, y=3)
raise_to_four = partial(raise, y=4)
raise_to_five = partial(raise, y=5)

co się tutaj stało? Naprawiliśmy parametry y i zdefiniowaliśmy trzy różne funkcje.

Nie musisz używać funkcji abstrakcyjnej zdefiniowanej powyżej (możesz ustawić ją jako prywatną ), ale możesz użyć funkcji częściowego zastosowania, aby poradzić sobie z podniesieniem liczby do stałej wartości.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow