Python:map函数中的调用方法

Rem*_*i.b 5 python methods list-comprehension map-function

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

map(function, list1)
[function(i) for i in list1]
Run Code Online (Sandbox Code Playgroud)

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

[i.function() for i in list1]
map(.function, list1) # error!
map(run_method(function), list1) # error!
Run Code Online (Sandbox Code Playgroud)

我怎么能用这种操作map呢?

Mar*_*ers 13

你用的是operator.methodcaller():

from operator import methodcaller

map(methodcaller('function'), list1)
Run Code Online (Sandbox Code Playgroud)

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

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

map(str.lower, list_of_strings)
Run Code Online (Sandbox Code Playgroud)

哪个str.lowerstr类型上的未绑定方法.

请注意,列表推导并不等同于map()此处.map()只能做一个循环,完全在C. map()zip()多个可迭代参数,和map()在Python 3本身是一个迭代器.

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