Python:map函数中的调用方法

时间:2014-02-16 16:46:32

标签: python methods list-comprehension map-function

map()和列表理解大致相同:

map(function, list1)
[function(i) for i in list1]

如果我们想要使用的函数是一种方法怎么办?

[i.function() for i in list1]
map(.function, list1) # error!
map(run_method(function), list1) # error!

我如何使用map执行此类操作?

2 个答案:

答案 0 :(得分:12)

您使用operator.methodcaller()

from operator import methodcaller

map(methodcaller('function'), list1)

methodcaller()接受其他参数,然后传递给被调用的方法; methodcaller('foo', 'bar', spam='eggs')(object)相当于object.foo('bar', spam='eggs')

如果list1中的所有对象都是该类型的相同类型或子类,要调用的方法不带任何参数,则可以传入未绑定的方法到map作为要调用的函数。例如,要小写列表中的所有字符串,可以使用:

map(str.lower, list_of_strings)

其中str.lowerstr类型的未绑定方法。

请注意,列表推导在这里并不等同于map()map()只能执行一个循环,完全使用C. map()zip()多个可迭代参数,而Python 3中的map()本身就是一个迭代器

另一方面,列表理解可以执行多个(嵌套)循环并添加过滤,左侧表达式可以是任何有效的Python表达式,包括嵌套列表推导。

答案 1 :(得分:1)

您可以使用对象的类型直接调用该方法。

map(lambda x: type(x).function(), list1)

这比更直接的

更令人兴奋
map(lambda x: x.function(), list1)

然而,它确实指出,如果Python有一个函数组合运算符,就像f**g(x) == f(g(x))那样会很好。然后你可以写

map(type**function, list1)