在下面的代码中,print(first)
返回first_child
函数的地址,这对我来说很有意义,因为parent()
函数返回对first_child
的引用,而不是first_child
函数本身,也就是说parent()
返回first_child
,而不是first_child()
由于返回的是对first_child
函数的引用,而不是函数本身,我不明白为什么print(first())
实际返回第一个子函数的输出,即显示“Hi,i am Emma”。为什么/怎么可能以这种方式调用first_child()
函数
def parent(num):
def first_child():
return "Hi, I am Emma"
def second_child():
return "Call me Liam"
if num == 1:
return first_child
else:
return second_child
first = parent(1)
second = parent(2)
print(first)
print(first())
您首先需要了解:在Python中,函数是一等公民。它们可以——而且确实——表现得像正常变量
忘记所有的C或Java函数。将python函数视为另一个变量—除了可以调用它之外—即
f()
对于f
变量是有意义的现在让我们回到你的问题,
parent
返回first_child
或second_child
-这些都像变量。现在,当您选取其中一个变量并将()
放在它们之后时,将调用该变量。这个调用的结果是对您在parent
中定义的字符串求值,因此您会得到“Hi I am Emma”您必须理解“对函数的引用”和python中的“函数本身”一样好
如果你想了解更多血淋淋的细节,请查看:https://medium.com/python-pandemonium/function-as-objects-in-python-d5215e6d1b0d
相关问题 更多 >
编程相关推荐