Definicja: Dekorator to wzór projektowy w Pythonie. Jest to funkcja, która przyjmuje inną funkcję jako argument, dodaj do niej pewną funkcjonalność, nie modyfikując i zwraca inną funkcję.
Nazywa się to za pomocą „(@)” i umieszczone przed zdefiniowaniem funkcji, którą chcemy ozdobić.
składnia:
Nazwa @Decorator
Definicja funkcji
Aby zrozumieć dekoratorów, musimy znać poniższe pojęcia.
Funkcje to obiekty pierwszej klasy. Oznacza to, że funkcja może być przekazana jako argument, może być zwrócona z innej funkcji, może być przypisana do zmiennej, można zdefiniować w innej funkcji. Aby uzyskać lepsze zrozumienie, zobacz poniższe przykłady.
Tutaj funkcja przyrostowa przekazana jako argument
Przykład 1.PY:
Wyjście:
>> przykład Python1.py
Przykład2.PY:
Wyjście:
>> przykład Python2.py
Tutaj funkcja say_wish powróciła z funkcji życzenia
Przykład3.PY:
Wyjście:
>> przykład Python3.py
Przykład4.PY:
Wyjście:
>> przykład Python4.py
Zamknięcie:
Python umożliwia zagnieżdżoną funkcję dostęp do zewnętrznego zakresu funkcji otaczającej.
DEF GFING (wiadomość):Przykład5.PY:
Wyjście:
>> przykład Python5.py
Po zrozumieniu powyższych pojęć teraz napiszmy przykład dekoratora.
Ex1: Tutaj udekorujemy funkcję wiadomości. Drukowanie MSG wewnątrz **** bez modyfikowania oryginalnej funkcji, i.mi., funkcja wiadomości.
#Decorator startPrzykład6.PY:
Wyjście:
>> przykład Python6.py
W najprostszej formie możemy umieścić dekoratora na definicji funkcji i wywołać funkcję, jak pokazano poniżej:
Tutaj, jakikolwiek ciąg chcemy ozdobić w środku ***, użyj tego dekoratora.
Wyjście:
Wielu dekorator:
Możemy mieć wielu dekoratorów dla jednej funkcji. Tutaj dekorator jest stosowany w kolejności, którą zadzwoniliśmy.
składnia:
@dekorator2
@dekorator1
Definicja funkcji
Tutaj zostanie zastosowany 1. dekorator, a następnie 2. dekorator.
Przekazywanie argumentów do funkcji dekoratora:
Możemy przekazać argumenty do funkcji opakowania. Argumenty przekazane do funkcji, dla której chcemy ozdobić.
Były:
def deco_wish (funkcja):Przykład7.PY:
Wyjście:
>> przykład Python7.py
Przekaż zmienną liczbę argumentów do funkcji dekoratora:
Możemy przekazać dowolną liczbę argumentów za pomocą *Args (argumenty nie-klawisze, takich jak liczby) i ** kwargs (argumenty słów kluczowych jak słownik). Oba są argumentami pozycyjnymi i przechowuje argumenty w zmiennych ARGS i KWARGS.
Uwaga: Tutaj możemy użyć dowolnej nazwy zamiast ARG i KWARG, ale te nazwy są zalecane do użycia.
Były:
def dec_var_args (funcja):Przykład8.PY:
Wyjście:
>> przykład Python8.py
Ex2: Załóżmy, że mamy 2 funkcje
Funkcja 1: Oblicz sumę liczb z podanej listy
Funkcja 2: Pomnóż każdą liczbę przez 2 i dodaj ją do podanej listy liczb
Jeśli chcemy obliczyć czas potrzebny dla wykonania, możemy to zrobić na 2 sposoby
Zobacz poniżej kod rozwiązany za pomocą dekoratora:
#Decorator startPrzykład 9.PY:
Wyjście:
>> przykład Python9.py
Powyższego dekoratora można użyć do obliczania czasu wykonywania dla dowolnej funkcji. Korzystając z dekoratora, możemy uniknąć powtarzanego kodu, gdy mamy wymóg obliczenia czasu wykonywania, aby umieścić dekoratora nad definicją funkcji.
Wniosek:
Dekoratorzy zmieniają funkcję funkcji/metody bez zmiany oryginalnego kodu funkcji jest dekorowane. Korzystając z tego, możemy uniknąć pisania powtarzanego kodu. Znajomość koncepcji dekoratora sprawi, że będziemy silni w Python. Możemy użyć dekoratora w poniższych przypadkach: