将不带 () 的函数传递给 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
将使用此函数对象为可迭代对象中的每个项目调用函数。
在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
将使用此函数对象为可迭代对象中的每个项目调用函数。