Dekoratorzy w Pythonie

Dekoratorzy w Pythonie
Dekoratorzy Pythona są niezwykle pomocną funkcją, ponieważ pozwalają programistom dostosować sposób zachowania metody lub klasy. Dekoratorzy umożliwiają nam zamknięcie innej funkcji w celu tymczasowego modyfikacji jej funkcjonalności podczas rozszerzenia funkcjonalności metody owiniętej. Najpierw zrozumiemy kilka koncepcji, które byłyby pomocne podczas nauki dekoratorów, zanim zaczniemy się w nich głęboko.

Kiedy korzystać z dekoratora Pythona

Ilekroć chcesz zmienić zachowanie funkcji bez zmiany samej metody, użyjesz dekoratora. Dodawanie dzienników, analiza wydajności, wykonywanie buforowania, potwierdzenie autoryzacji i inne zadania to kilka znaczących przykładów. Ilekroć musisz wykonać identyczny kod na wielu procesach, możesz jednak go wykorzystać. W rezultacie nie będziesz musiał pisać zduplikowanych programów.

Wymagania wstępne do zrozumienia dekoratorów

Musimy najpierw zrozumieć kilka podstawowych koncepcji Pythona, zanim dowiemy się o dekoratorach.

    • Funkcje mogą być stosowane lub dostarczane jako parametry w Pythonie, ponieważ zachowują się jak klasy i obiekty.
    • Element typu obiektu jest funkcją.
    • Funkcję można zachować w zmiennej.
    • Funkcja jest używana jako argument w innej funkcji.
    • Użytkownicy mogą zwrócić inną metodę z funkcji.
    • Mogą być przechowywane w strukturach danych, takich jak tabele skrótów.

Aby uzyskać dobre zrozumienie, rozważ następujące przypadki:

Przykład 1:

W tym przypadku będziemy traktować te funkcje jako obiekty. Podamy zmienną metodę SHOUT. To generuje drugą nazwę, krzyczą, które wskazuje na obiekt funkcji określony metodą krzyku, ale nie wywołuje funkcji.


Na początku programu definiujemy funkcję Shout (). Tutaj przekazujemy atrybut „t” jako parametr funkcji shout (). Ta funkcja zwraca tekst w górnym formacie. Używamy funkcji Upper (). Następnie wywołujemy metodę wyświetlania linii. W ramach tej funkcji wywołujemy funkcję shout (). Podajemy tekst, który chcemy wyglądać na ekranie jako wyjście. Ustawiamy wartość funkcji shout () równa funkcji Yell (). W ostatnim wierszu drukujemy wartość metody krzyżowania, więc zastosujemy metodę print (). Tutaj określamy również wartość „dzień dobry” jako argument funkcji Yell ().

Przykład 2:

Podamy tę metodę innej funkcji jako parametru. Tutaj metoda pozdrowienia akceptuje drugą funkcję jako argument (krzyk i szept). Następnie funkcja witania wywołuje inne zdefiniowane funkcje, które zostały określone jako wejście.


Funkcja Shout () jest zdefiniowana na początku programu. Tutaj argumentem funkcji krzyku jest element „t”. Daje to tekst z powrotem w obudowie górnej, ponieważ wykorzystaliśmy funkcję Upper (). Metoda Whisper () jest zdefiniowana w następnym etapie. Ta funkcja wyświetla tekst przekazany jako argument w dolnym formacie. Metoda Greet () jest teraz stosowana. Tutaj podajemy parametr „FUNC”, który jest zdefiniowany w następującej linii. Określamy wartość atrybutu „FUNC”, który musimy przedstawić na konsoli. Na koniec stosujemy funkcję print (), aby pokazać wartości zarówno metod SHOUT, jak i Whisper.


Wspomniane wcześniej przypadki pokazują główne pojęcia, które są wymagane do zrozumienia dekoratorów. Teraz wykonamy niektóre przypadki, aby zademonstrować użycie dekoratorów.

Dekoratorzy

Jak już powiedziano, dekoratorów można wykorzystać do zmiany funkcji lub zachowania klasy. Funkcje są zdefiniowane w funkcji opakowania podczas używania dekoratorów, gdzie są przekazywane jako parametry do innych funkcji.

Przykład 3:

Ta ilustracja może zilustrować, w jaki sposób dekorator zmienia zachowanie funkcji.


Przede wszystkim definiujemy dekoratora. Następnie nazywamy funkcję inner1 (). Jest to metoda opakowania, w której wywoływany jest parametr. W ramach tej funkcji korzystamy z funkcji print (). Następnie wywołujemy rzeczywistą funkcję w funkcji opakowania. Ponownie stosujemy metodę print ().w następnej linii. Definiujemy metodę FUN_USE (), którą należy wywołać w opakowaniu. Teraz przekazujemy „zabawne” w dekorator, aby zmodyfikować jego zachowanie. Aby zakończyć kod, wywołujemy metodę.

Przykład 4:

Przejdźmy do innego przypadku, w którym możemy ustalić, ile czasu zajmuje funkcja wykonania, wykorzystując dekorator.


Tutaj importujemy wymagane pliki nagłówka, które obejmują czas i matematykę. Biblioteka „czasu” jest odpowiedzialna za obliczenie „czasu”, a moduł „matematyki” jest odpowiedzialny za wszystkie operacje matematyczne. Używamy dekoratora do obliczenia czasu trwania funkcji. Definiujemy metodę Cal_Time (). Ta funkcja zawiera dowolną wymaganą funkcję jako parametr. Zastosujemy funkcję inner1 (). Zapewniamy *args i ** kwargs jako argumenty funkcji. W następnym kroku przechowujemy czas przed wdrożeniem funkcji. Nazywamy metodą Time () powiązaną z modułem „czas”. Następnie nabywamy czas po wykonaniu metody. Ponownie wykorzystujemy funkcję Time (), a jej wartość jest zapisywana w zmiennej „End”.

Metoda print () stosuje się, aby pokazać obliczony czas. Teraz obliczamy czynnik, więc definiujemy metodę Proctial (). Przekazujemy określoną liczbę jako jego parametr. Ustawiliśmy 3 -sekundową wartość dla funkcji sleep (), ponieważ zajmuje to bardzo mało czasu, abyśmy mogli zauważyć faktyczną różnicę. Funkcja print () jest stosowana do wyświetlania czynnika liczby. Ostatecznie wywołujemy czynnik, podając liczbę, której chcemy obliczyć czynnik.

Wniosek

W tym przewodniku omówiliśmy sposób przekazania funkcji zmiennej, jak traktować funkcje jako obiekty, jak zwracać funkcje i jak zapewnić funkcję jako parametr do innej funkcji. Wraz z kilkoma instancjami pokazaliśmy również, jak budować i korzystać z dekoratorów Pythona. Wdrożyliśmy kod, który wykorzystuje dekoratorów do zmiany zachowania funkcji. I na innej ilustracji użyliśmy dekoratora do ustalenia, ile czasu zajmuje funkcja do wykonania.