How to use pythons map with a non-iterable and iterable set of parameters?
举个简单的例子,我不在乎实用性,只关心实施性。假设我用一些方法创建了一些类。我想创建一个列表,包含它们是否可以调用。所以我可以从以下方面来举这个例子:查找对象的方法
1 | [method for method in dir(object) if callable(getattr(object, method))] |
这对它所做的很好,但是如果真的是为了它,我想用地图,我有一个物体,这是一个不可辩驳的项目…
1 | map(callable,map(getattr,object,dir(object))) |
关注真正的问题:
我有一个不可更改的列表和一个不可更改的项目。什么是最好的解决方案,让我使用一些不可迭代的项目和一个不可迭代的项目,以便我可以利用地图?
我承认我不理解为什么,因为信用证有效,但是:
1 | map(lambda x: callable(getattr(object, x)), dir(object)) |
有时候信用证就是正确的方式
1 2 | >>> from itertools import izip, repeat, starmap >>> map(callable, starmap(getattr, zip(repeat(object), dir(object)))) |
这也可以,但需要
1 | >>> map(callable, map(getattr, repeat(object, len(dir(object))), dir(object))) |
最后
1 2 | >>> from itertools import izip_longest >>> map(callable, starmap(getattr, izip_longest([], dir(object), fillvalue=object))) |
如果你不清楚上面的lambda是做什么的,你可以定义:
1 2 3 4 | def myMap(fun1,obj,iterlist): def fun2(x): return fun1(obj,x) return map(fun2,iterlist) |
然后,呼叫
1 | map(callable,myMap(getattr,object,dir(object))) |
例如:
1 | map(callable,myMap(getattr,myMap,dir(myMap))) |
尽管使用lambda更像是Python。