举一个简单的例子,我不关心实用性,只关心实现。假设我用一些方法创建了一些类。我想创建一个包含它们是否可调用的列表。所以我可以从这个例子: Finding what methods an object has
[method for method in dir(object) if callable(getattr(object, method))]
它的功能很棒,但是如果对它来说,我想使用map并且我有对象,这是一个不可迭代的项目...
map(callable,map(getattr,object,dir(object)))
专注于真正的问题:
我有一个可迭代列表和一个不可迭代的项目。什么是最好的解决方案,让我使用一些不可迭代的项目和一个可迭代的项目,以便我可以利用地图?
答案 0 :(得分:2)
我承认不理解为什么,因为LC工作,但是:
map(lambda x: callable(getattr(object, x)), dir(object))
答案 1 :(得分:0)
如果您不清楚上述lambda的作用,则可以定义:
def myMap(fun1,obj,iterlist):
def fun2(x):
return fun1(obj,x)
return map(fun2,iterlist)
然后,拨打
map(callable,myMap(getattr,object,dir(object)))
例如:
map(callable,myMap(getattr,myMap,dir(myMap)))
虽然使用lambda更加pythonic。
答案 2 :(得分:0)
有时LC是正确的做法
>>> from itertools import izip, repeat, starmap
>>> map(callable, starmap(getattr, zip(repeat(object), dir(object))))
这也有效,但需要dir(object)
两次
>>> map(callable, map(getattr, repeat(object, len(dir(object))), dir(object)))
最后
>>> from itertools import izip_longest
>>> map(callable, starmap(getattr, izip_longest([], dir(object), fillvalue=object)))