首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Do container.concatenate(ItemType.function)

Do container.concatenate(ItemType.function)
EN

Stack Overflow用户
提问于 2014-11-12 20:59:25
回答 3查看 45关注 0票数 0

有没有可能从一个列表子对象中获取一个函数对象,当它被调用时,会将一个特定的函数应用于所有的项,并以某种方式处理它们(定义的函数)?

我需要连接应用于每个元素的单个函数的输出,但我只需要能够使用一个参数调用它,即列表的实例(它将链接到回调)。

因此,基本上,我如何通过处理是串联的示例来实现这一点:

代码语言:javascript
运行
复制
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

我也对其他选择持开放态度。

EN

回答 3

Stack Overflow用户

发布于 2014-11-12 21:08:38

我需要连接应用于每个元素的单个函数的输出,但我只需要能够使用一个参数调用它,即列表的实例

我不确定我是否完全理解了你的问题和例子,但从这个描述看,你似乎在搜索map。基本上,它将一个函数应用于序列中的每个元素,并返回一个包含结果的列表:

代码语言:javascript
运行
复制
>>> plusone= lambda x:x+1
>>> print map(plusone, [3,4,5])
[4, 5, 6]

如果您确实想要,您可以将其附加到自定义容器:

代码语言:javascript
运行
复制
>>> class MyContainer(list):
...     def plusone(self):
...         return map(plusone, self)
... 
>>> MyContainer([3,4,5]).plusone()
[4, 5, 6]

但我认为直接调用map更清楚,因为它是显式的

票数 0
EN

Stack Overflow用户

发布于 2014-11-12 22:15:46

如果callable是列表的第一个元素,则可以分别将第一个项目和其余项目作为参数传递给map

代码语言:javascript
运行
复制
def f(x):
    return x + 3

my_list = [f, 1, 2, 3, 4, 5]
map(my_list[0], my_list[1:])
票数 0
EN

Stack Overflow用户

发布于 2014-11-13 04:19:48

所有的帖子几乎都知道这一点,但由于我不够清楚地得到了答案,我将发布我的解决方案。

不需要创建一个类,我可以通过这样做来创建一个聚合器访问器,这是一个连接结果的示例:

代码语言:javascript
运行
复制
(callback_accessor, instance_object) = ((lambda cont: [i.functionToApply() for i in cont]), container)

#... Call:

value = callback_accessor(instance_object)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26887623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档