将不带 () 的函数传递给 map/filter/reduce

Passing functions without () into map/filter/reduce

在Python3.X中,当将方法传递给Map/Filter/Reduce时,为什么没有'()'?这是否适用于所有生成器?

这可能是一个简单的问题,但我在文档中找不到明确的答案。我希望了解原因,而不仅仅是“记住”语法。

例如

map(str.upper, ['a', 'b', 'c']) #this works 
vs 
map(str.upper(), ['a', 'b', 'c']) #this gives an error

一开始这很令人困惑,尤其是当您来自其他编程语言时。在 Python 中,函数是对象,您可以在不调用它们的情况下传递它们。检查以下示例:

def func():  # function definition
    print("func was invoked")


a = func  # assign func object (without invoking it)
print(a, type(a))


a()  # invoking the function

map 将使用此函数对象为可迭代对象中的每个项目调用函数。