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
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.lower
是str
类型上的未绑定方法.
请注意,列表推导并不等同于map()
此处.map()
只能做一个循环,完全在C. map()
将zip()
多个可迭代参数,和map()
在Python 3本身是一个迭代器.
另一方面,列表推导可以执行多个(嵌套)循环并添加过滤,左侧表达式可以是任何有效的Python表达式,包括嵌套列表推导.