有没有可能从一个列表子对象中获取一个函数对象,当它被调用时,会将一个特定的函数应用于所有的项,并以某种方式处理它们(定义的函数)?
我需要连接应用于每个元素的单个函数的输出,但我只需要能够使用一个参数调用它,即列表的实例(它将链接到回调)。
因此,基本上,我如何通过处理是串联的示例来实现这一点:
class Aggregator(list):
def concatenate(self,func):
return lambda s: [s.func() for s in self]
container = Aggregator()
# append objects
(callback, instance) = container.concatenate(ItemType.functionToApplyToAll), container我也对其他选择持开放态度。
发布于 2014-11-12 21:08:38
我需要连接应用于每个元素的单个函数的输出,但我只需要能够使用一个参数调用它,即列表的实例
我不确定我是否完全理解了你的问题和例子,但从这个描述看,你似乎在搜索map。基本上,它将一个函数应用于序列中的每个元素,并返回一个包含结果的列表:
>>> plusone= lambda x:x+1
>>> print map(plusone, [3,4,5])
[4, 5, 6]如果您确实想要,您可以将其附加到自定义容器:
>>> class MyContainer(list):
... def plusone(self):
... return map(plusone, self)
...
>>> MyContainer([3,4,5]).plusone()
[4, 5, 6]但我认为直接调用map更清楚,因为它是显式的
发布于 2014-11-12 22:15:46
如果callable是列表的第一个元素,则可以分别将第一个项目和其余项目作为参数传递给map。
def f(x):
return x + 3
my_list = [f, 1, 2, 3, 4, 5]
map(my_list[0], my_list[1:])发布于 2014-11-13 04:19:48
所有的帖子几乎都知道这一点,但由于我不够清楚地得到了答案,我将发布我的解决方案。
不需要创建一个类,我可以通过这样做来创建一个聚合器访问器,这是一个连接结果的示例:
(callback_accessor, instance_object) = ((lambda cont: [i.functionToApply() for i in cont]), container)
#... Call:
value = callback_accessor(instance_object)https://stackoverflow.com/questions/26887623
复制相似问题