如何使用迭代器将lambda函数列表应用于单个元素?

时间:2011-12-01 15:42:36

标签: python list lambda iterator yield

我想使用必须使用yield创建的iterable将lambda函数列表应用于单个元素。

lambda函数列表将具有如下内容:

[<function <lambda> at 0x1d310c8>, <function <lambda> at 0x1d355f0>]

我希望将每个函数从左到右应用到单个元素,使用yield来构造一个迭代来迭代列表

5 个答案:

答案 0 :(得分:7)

def apply_all(functions, item):
    for f in functions:
        yield f(item)

使用示例:

functions = [type, id, hex]
for result in apply_all(functions, 55):
    print result

给出

<type 'int'>
20326112
0x37

答案 1 :(得分:3)

试一试:

def lambda_apply(unnamed_funcs, element):
    for unnamed in unnamed_funcs:
        yield unnamed(element)

>>> l = [lambda x: x**2, lambda x: 2*x]
>>> el = 5

>>> for y in lambda_apply(l, el):
...     print y
... 
25
10

请注意,这不仅适用于未命名函数的列表,还适用于arity 1的任何函数列表。这是因为所有命名或不命名的函数都是python中的第一类对象。您可以将它们存储在列表中,稍后再使用它们,如上所示。

答案 2 :(得分:2)

答案可以表述为

import numpy as np

def apply_funcs( funcs, val ):
    for func in funcs:
        yield func(val)

my_funcs = [lambda x: np.cos(x), np.sin, np.tan]
my_val = 0.1

for res in apply_funcs( my_funcs, my_val ):
    print res

其中apply_funcs函数可以解决问题,其余功能仅用于演示目的。

答案 3 :(得分:1)

您是否需要yield声明?

因为还有另一种创建生成器的方法:使用()

applied_it = (f(item) for f in functions)

答案 4 :(得分:0)

def apply(value, lambda_list):
    for function in lambda_list:
          yield (function(value))