【发布时间】:2021-07-27 12:20:25
【问题描述】:
所以我遇到了here 下面的代码,我无法理解返回语句的工作原理。 operation 是函数 seven 和 five 中的一个参数,但它在 return 语句中用作函数调用。这里发生了什么?
代码是:
def seven(operation = None):
if operation == None:
return 7
else:
return operation(7)
def five(operation = None):
if operation == None:
return 5
else:
return operation(5)
def times(number):
return lambda y: y * number
编辑:在@chepner 评论之后,它们是这样被调用的,例如:
print(seven(times(five())))
【问题讨论】:
-
在 python 中,函数可以作为参数传递给其他函数,因为它们被称为 一等公民。见这里:What is first class function in Python
-
您错过了
seven和five如何被调用。例如,您可以编写seven(times),它会返回一个将its 参数乘以7的函数。然后seven(times)(3) == 21. -
您在函数式编程中经常看到这一点:
times是一个将*运算符部分应用于其参数的函数。times(3) == lambda y: y * 3。你也可以写times(3)(7) == 21。five和seven是分别将其参数应用于5和7的函数。 -
两者中的默认参数
None代表身份函数lambda x : x。如果它以id的名称内置到 Python 中,那就太好了,但是(唉)这个名称已经被占用了。