Funkcja zagnieżdżona:
Funkcja zagnieżdżona jest zdefiniowana w innej funkcji. Funkcje te mogą uzyskać dostęp do zmiennej funkcji zewnętrznej. Zmienna nielokalna, do której można uzyskać dostęp w ramach ich zakresu.
Były:
defouter_fun (S):Wyjście:
W powyższym przykładzie inner_fun jest funkcją zagnieżdżoną, a MSG jest zmienną nielokalną. Możemy uzyskać do nich dostęp do ciała zewnętrznego.
Definicja zamknięcia:
Zamknięcie Pythona jest funkcją zagnieżdżoną. Możemy uzyskać dostęp do zmiennej poza zakresem. Ta koncepcja jest niezbędna do zrozumienia dekoratorów Pythona.
Wszystkie zagnieżdżone funkcje nie są zamknięciami. Poniższe trzy kryteria powinny się spełnić, aby zdefiniować zamknięcie:
Były:
#definiowanie funkcji zagnieżdżonychWyjście:
W powyższym przykładzie freet_msg jest funkcją zewnętrzną. Stwarza to funkcję wewnętrzną (tu jest tutaj zamknięcie) i jest zwracana.
Funkcja zewnętrzna Greet_msg Zwraca funkcję print_msg i jest przypisana do zmiennej Call_Fun. Tutaj widzimy, że funkcja zewnętrzna zakończyła jej wykonanie, ale nadal możemy uzyskać dostęp do zmiennej MSG.
Jak zmodyfikować zmienną wewnątrz zamknięcia:
Za pomocą nielokalnego słowa kluczowego możemy zmodyfikować zmienną wewnątrz funkcji wewnętrznej.
Były: Bez użycia nielokalnego słowa kluczowego. Tutaj staramy się zmodyfikować zmienną NUM wewnątrz zamknięcia i otrzymujemy UnboundLocalerRor, ponieważ Python uważa, że NUM za zmienną lokalną, a NUM nie jest zdefiniowany w FUN ().
defgeniate_num ():Wyjście:
Były: Z użyciem nielokalne Słowo kluczowe. W poniższym przykładzie za pomocą nielokalnego słowa kluczowego będziemy w stanie zmodyfikować zmienną NUM.
defgeniate_num ():Wyjście:
Napiszemy więcej przykładu za pomocą zamknięcia:
Były: To wydrukuje przekazane argumenty i nazwa funkcji
Defouteter (FUNC):Wyjście:
Były: W poniższym przykładzie za każdym razem, gdy wywołanie zostanie wywoływane, wartości będą dołączane do listy i dodają wszystkie wartości na liście, a następnie zwróci wartość.
defaddition ():Wyjście:
Były: W tym przykładzie pomnóż numer parametru funkcji wewnętrznej według parametru funkcji zewnętrznej
def multiply_by_number (m):
Wyjście:
Wniosek:
Zamknięcie Pythona jest funkcją zagnieżdżoną. Dzięki temu możemy uniknąć stosowania zmiennych globalnych za pomocą zmiennych nielokalnych. Zapewnia to ukrywanie danych i zrozumienie tej koncepcji pomocne w budowaniu dekoratora Pythona.