【问题标题】:Putting/Placing a function without parenthesis inside map, filter and reduce functions in python在python中的map,filter和reduce函数中放置/放置一个没有括号的函数
【发布时间】:2022-08-18 17:33:05
【问题描述】:

为什么我们在 map、filter 和 reduce 函数中放置一个不带括号的函数?检查下面的代码

def func(n):
    return n**2
print(list(map(func,[1,2,3,4,5,6,7]))) # Here in this line of code func is placed inside map function without parenthesis. Why it is not put in this way map(func(),[1,2,3,4,5,6,7])?

Output: 
[1, 4, 9, 16, 25, 36, 49]
  • 因为你传递的是函数,而不是执行的结果

标签: python function parentheses


【解决方案1】:

map 基本上等同于以下(非常简化的)代码:

def map(function_object, sequence):
    return [function_object(item) for item in sequence]

如您所见,这个function_object 应该只在这个伪map 函数中运行。

向函数添加括号会调用该函数,在这种情况下,这不是您想要做的 - 因为您想将该函数对象传递给另一个函数(在这种情况下为map)并告诉它处理一系列其他项目.

python 中任何需要另一个函数作为其参数之一的内置函数,如reducefilter 等都使用相同的主体。

换句话说,如果您将func() 作为您的问题中的参数,map 将无法获得该函数,它将获得从该函数返回的结果,因为它已经被调用。在您的示例中,这也是一个错误,因为 func 不能在没有参数的情况下调用。

【讨论】:

    【解决方案2】:

    阅读 Python docs for map,我们可以看到 map 接受一个函数和一个可迭代对象,然后将该函数应用于该可迭代对象中的每个项目。

    如果我们要在函数中添加括号,那么function() this 不会传递函数对象本身,而是执行这样的函数,并提供函数的返回值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2020-09-26
      • 2022-01-21
      相关资源
      最近更新 更多