Python – #4 – Funkcja zwracająca funkcję

Wprowadzenie.

Wpis ten można powiedzieć, że jest kontynuacją poprzedniego wpisu, gdzie opisałem jak realizowana jest funkcja zagnieżdżona. W tym wpisie przedstawię możliwość jaką jest zwracanie funkcji zagnieżdżonej.

Zakres artykułu.

  • Funkcja zwracająca funkcję

Funkcja zwracająca funkcję

Jako naszą bazę wykorzystajmy pierwszy przykładowy program z poprzedniego wpisu to jest “Python – #3 – Funkcja w funkcji”. W programie wprowadźmy zmiany, gdzie funkcja fun1() będzie zwracała fun2(), czyli napiszmy return fun2. Kolejne modyfikacje znajdują się w programie głównym, gdzie do nowo stworzonej zmiennej przypisujemy funkcję zewnętrzną fun1(), a następnie wywołujemy zmienną jako funkcję poprzez dodanie nawiasów. W celu łatwiejszej nawigacji dodajmy jeszcze jednego printa między przypisaniem funkcji do zmiennej a wywołaniem zmiennej. Ostateczna postać programu w moim przypadku wygląda następująco.

def fun1():

    print("To jest fun1")

    def fun2():
        print("To jest fun2")

    fun2()
    print("To jest ponownie fun1")

    return fun2

xFun1 = fun1()
print("Po przypisaniu fun1 w programie głównym")
xFun1()

Po wykonaniu programu, w konsoli powinniśmy  ujrzeć następujący wynik.

To jest fun1
To jest fun2
To jest ponownie fun1
Po przypisaniu fun1 w programie głównym
To jest fun2

Jak możemy zobaczyć, podczas przypisania zwracanej wartości funkcji fun1() do zmiennej program z funkcji fun1() wykonał się w standardowy sposób. Natomiast w przypadku, gdy wywołujemy funkcję z przypisanej zmiennej, wówczas wykonuje się tylko ta cześć kodu, która zawarta jest w funkcji zagnieżdżonej fun2().

W kolejnym kroku sprawdźmy co będzie jak funkcja zagnieżdżona będzie przyjmowała argumenty. Przyjdźmy teraz do zmodyfikowania powyższego programu w taki sposób, aby do funkcji zagnieżdżonej dodać parametr text, a następnie ten parametr wyświetlmy w funkcji zagnieżdżonej przy pomocy funkcji print. W kolejnym kroku, aby program nie wysypał się musimy w funkcji zewnętrznej fun1() dodać argument w momencie, gdy wywołujemy funkcję zagnieżdżoną niech to będzie fun2(“tekst domyślny”). Następna modyfikacja ma miejscy przy zmiennej, do której przypisaliśmy zwracaną wartość funkcji fun1(). Przy wywoływaniu tej zmiennej musimy po prostu podać argument dla funkcji zagnieżdżonej. Ostateczna postać programu wygląda następująco. 

def fun1():

    print("To jest fun1")

    def fun2(text):
        print("To jest fun2")
        print(text)

    fun2("tekst domyślny")
    print("To jest ponownie fun1")

    return fun2

xFun1 = fun1()
print("Po przypisaniu fun1 w programie głównym")
xFun1("Mój nowy tekst")

Po wykonaniu programu, w konsoli powinniśmy  ujrzeć następujący wynik.

To jest fun1
To jest fun2
tekst domyślny
To jest ponownie fun1
Po przypisaniu fun1 w programie głównym
To jest fun2
Mój nowy tekst

Jak widzimy argumenty są bez problemu przenoszone do funkcji zagnieżdżonej.

Autor artykułu
Dominik Bednarski

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.