Python вмещающие функции - PullRequest
1 голос
/ 20 марта 2019

Я изучаю включающие функции и имею следующий код:

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son

print(parent())

Почему print(parent()) не печатает "Hello", а печатает <function parent.<locals>.son at 0x00000136A32E9EA0>?

Я заметил, что если я сделаю следующее, будет напечатано «Hello»:

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son

akin = parent()
akin()

Какая разница между одним и другим?

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Функция parent возвращает другую функцию.Эта функция должна вызываться для вступления в силу:

print(parent()())

Или для выделения последовательности вызова:

print((parent())()
0 голосов
/ 20 марта 2019

Здесь вам нужно вернуть son ()

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son # return son()

print(parent())

Здесь вы получите результат разницы, потому что ссылаетесь на akin ()

def parent(x="Hello"):
    text = x

    def son():
        print(text)

    return son

akin = parent()
akin() # print(akin) will get the same output of first program

Разница заключается в том, что каждая функция имеет адрес памяти,если вы ссылаетесь на функцию без скобок (), вы получите адрес этой функции.Итак, в вашей первой программе вы возвращаете адрес памяти функции, чтобы вы могли получить доступ к содержимому с помощью parent () () или вернуть фактическое значение из функции вместо возврата адреса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...