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.