Вложенные функции Python

Функции вPythonмогут быть вложены в другие функции.

Функция, определенная внутри функции, видна только внутри этой функции.

Это полезно для создания утилит, которые полезны для функции, но бесполезны вне ее.

Вы спросите: а зачем мне «прятать» эту функцию, если она не вредит?

Во-первых, потому что всегда лучше скрывать локальные для функции функциональные возможности и нигде не полезные.

Кроме того, потому что мы можем использовать замыкания (подробнее об этом позже).

Вот пример:

def talk(phrase):
    def say(word):
        print(word)
words <span style="color:#f92672">=</span> phrase<span style="color:#f92672">.</span>split(<span style="color:#e6db74">' '</span>)
<span style="color:#66d9ef">for</span> word <span style="color:#f92672">in</span> words:
    say(word)

talk(‘I am going to buy the milk’)

Если вы хотите получить доступ к переменной, определенной во внешней функции, из внутренней функции, вам сначала нужно объявить ее какnonlocal:

def count():
    count = 0
<span style="color:#66d9ef">def</span> <span style="color:#a6e22e">increment</span>():
    nonlocal count
    count <span style="color:#f92672">=</span> count <span style="color:#f92672">+</span> <span style="color:#ae81ff">1</span>
    <span style="color:#66d9ef">print</span>(count)

increment()

count()

Это особенно полезно для замыканий, как мы увидим позже.


Больше руководств по питону: