- Musí to být vnořená metoda / funkce.
- Musí mít přístup k volné proměnné ve vesmíru.
- Musí se vrátit z vnější funkce.
Vnořená funkce
Nejprve musíte pochopit, co je vnořená metoda. Vnořenou funkci lze definovat jako metodu určenou v rámci jiné metody. Rekurzivní funkce mohou dosáhnout proměnných vnějšího rozsahu. Chcete-li změnit nelokální proměnné, specificky je definujeme jako nelokální prostřednictvím nelokálních klíčových slov, protože jsou od přírody jen pro čtení. Nejprve se tedy podívejte na vnořenou funkci prováděnou v programu Spyder Python 3.
Definovali jsme dvě funkce: vnější a vnitřní. Ve vnější funkci jsme deklarovali proměnnou s nějakou textovou hodnotou.
def outer_func ()msg = 'Hy! Jsem Aqsa Yasin '
Tato proměnná byla vytištěna ve vnitřní funkci pomocí příkazu print. Poté je vrácena vnitřní funkce, což je vnořená funkce, a poté byla volána vnější funkce.
def inner_func ()tisk (zpráva)
návrat inner_func ()
inner_func ()
Pokud nepoužíváte klíčové slovo return pro vrácení vnitřní funkce, vrátí stále stejný výsledek.
Když spustíte tento jednoduchý kód, vrátí vám text definovaný jako hodnota v proměnné 'msg'.
Výstup: Hy! Jsem Aqsa Yasin
Nyní definujte stejný typ vnořené funkce bez návratového klíčového slova a předávání proměnné 'msg' v parametru a získáte stejný výstup.
Výstup: Dobrý den
Funkce jednoduchého uzavření
Použijte stejný kód, s malou změnou na posledních dvou řádcích. S provázkem 'Ahoj', the show_msg () byla vyvolána metoda a vrácená metoda byla svázána se slovem 'další'. Při volání další(), text 'Ahoj' byl stále odvolán, zatímco show_msg () metoda již byla spuštěna. Nezapomeňte přidat proměnnou 'msg' v rámci vnější funkce.
Když spustíte tento kód, ukáže se, že vnitřní funkce, která je a ukázat(), byl přiřazen k proměnné 'další'.
Výstup:
Můžete jednoduše vytisknout název funkce přiřazené proměnné 'další' tak jako:
tisk (další.__název__)
Na výstupu bude název funkce.
Výstup: ukázat
Nyní, pokud chcete tuto proměnnou spustit jako funkci, stejně jako jiné metody, můžete to udělat přidáním závorek a voláním takto:
another = show_msg ("Hello")další()
další()
Můžete to volat tolikrát, kolikrát chcete.
Když spustíte tento kód, zobrazí se něco takového:
Výstup:
Ahoj
Ahoj
Ahoj
Nyní vidíte, že i po dokončení provádění vnější funkce si vnitřní funkce stále pamatuje proměnné a další věci, které byly vytvořeny nebo definovány v místním prostoru.
Funkce uzavření pomocí parametrů
Nyní jsme přidali parametry při předávání proměnné ve vnější funkci jako:
def show_msg (msg)Hodnota předaná do parametru vnější funkce bude přiřazena proměnné definované v této vnější funkci jako:
Zpráva = zprávaPředejte některé hodnoty řetězce v nově vytvořených proměnných na posledním řádku, jako:
func1 = show_msg ('Ahoj')func2 = show_msg ('Hello')
Nyní musíte tyto funkce zavolat takto:
func1 ()func2 ()
Získáte následující výstup zobrazený na obrázku editoru spyder:
V rámci Pythonu je tento proces, kterým se ke skriptu připojí jakákoli data (pro tento scénář Ahoj nebo Ahoj), pojmenován Uzavření.
Jednoduché násobení pomocí Python Closure
Definovali jsme dvě funkce. Jeden je vnější, který má definován multiplikátor, a vnitřní, ve kterém bude hodnota předána při volání funkce. Ve vnější funkci jsme deklarovali proměnnou s předanou definovanou hodnotou multiplikátoru. Tato hodnota multiplikátoru 'n' byla vynásobena určitou hodnotou 'X' který je předán v tiskovém příkazu vnitřní funkci. Poté se vrátí vnitřní funkce, což je vnořená funkce, a poté se proměnné v tiskových příkazech volají jedna po druhé.
def out_multiply (n):def in_multiply (x):
návrat x * n
návrat in_multiply
Nová proměnná nyní přiřadila nějakou hodnotu, která má být předána v parametru vnější funkce. Tato hodnota bude uložena v proměnné 'n', což je multiplikátor definovaný ve vnější funkci:
times3 = out_multiply (3)times5 = out_multiply (5)
K těmto proměnným bude přiřazeno více hodnot, které budou uloženy do souboru 'X' proměnná definovaná ve vnitřní funkci, kterou je třeba vynásobit multiplikátorem 'n'. Když vytiskneme proměnnou pojmenovanou jako „časy“, funkci s nějakou celočíselnou hodnotou 'X' přiřazený v závorkách způsobí, že se to znásobí hodnotou vnější funkce 'n'.
První bude výstup 27 při provádění tiskového prohlášení, protože proměnná 'n' má 3 jako multiplikátor a dali jsme 9 jako další celé číslo, které se má vynásobit.
tisk (krát 3 (9))Druhý bude výstup 15 při provádění tiskového příkazu, protože proměnná 'n' má 3 jako multiplikátor a dali jsme 5 jako další celé číslo, které se má vynásobit.
tisk (krát5 (3))Poslední bude výstup 30 při spuštění tiskového příkazu, protože rekurzivně volá časy na proměnnou funkce. Poprvé, časy ano 'n' mít 3 jako multiplikátor, který bude vynásoben na celé číslo 2. Při násobení bude výstup 6. Nyní bude tato 6 použita jako hodnota, poté předána jako argument proměnné funkci times, kde 'n' multiplikátor proměnné je 5. Takže když 5 se vynásobí 6 to bude výstup 30.
tisk (krát5 (krát3 (2)))
Výstup můžete vidět v konzole editoru Spyder.
Závěr
Uzávěry mohou bránit použití globálních hodnot a mohou mít formu skrývání dat. Mohlo by to také poskytnout objektově nebo subjektově orientovaný přístup k problému. Doufejme, že po provedení této příručky budete moci získat základy uzavření Pythonu.