Python封闭函数

时间:2019-03-20 04:06:35

标签: python closures

我正在学习封闭函数,并具有以下代码:

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 个答案:

答案 0 :(得分:2)

函数2019.03.12 2019.03.11 2019.03.14返回另一个函数。必须调用该函数才能生效:

parent

或者,强调呼叫顺序:

print(parent()())

答案 1 :(得分:0)

在这里您需要返回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()()访问内容或从函数返回实际值,而不是返回地址