我正在学习封闭函数,并具有以下代码:
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()
彼此之间有什么区别?
答案 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()()访问内容或从函数返回实际值,而不是返回地址