【问题标题】:Python function argument used as a function call in the return statement?Python函数参数在return语句中用作函数调用?
【发布时间】:2021-07-27 12:20:25
【问题描述】:

所以我遇到了here 下面的代码,我无法理解返回语句的工作原理。 operation 是函数 sevenfive 中的一个参数,但它在 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
  • 您错过了sevenfive 如何被调用。例如,您可以编写seven(times),它会返回一个将its 参数乘以7 的函数。然后seven(times)(3) == 21.
  • 您在函数式编程中经常看到这一点:times 是一个将* 运算符部分应用于其参数的函数。 times(3) == lambda y: y * 3。你也可以写times(3)(7) == 21fiveseven 是分别将其参数应用于 57 的函数。
  • 两者中的默认参数None 代表身份函数lambda x : x。如果它以 id 的名称内置到 Python 中,那就太好了,但是(唉)这个名称已经被占用了。

标签: python function return


【解决方案1】:

这些方法基本上允许您传递将被调用的函数对象。看这个例子

def square(x):
    return x*x

def five(operation=None):
    if operation is None:
        return 5
    else:
        return operation(5)

我现在可以调用five 并将square 作为operation 传递

>>> five(square)
25

【讨论】:

    【解决方案2】:

    这里发生了什么?

    此代码利用python 中的函数是一等公民,因此函数可以作为函数参数传递。这种能力不是 python 语言独有的,但如果你习惯了没有该功能的语言,可能会令人难以置信。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2021-11-07
      • 2015-12-04
      • 2020-01-18
      • 2014-02-16
      • 2020-06-09
      相关资源
      最近更新 更多