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

3 投票
5 回答
874 浏览
提问于 2025-04-17 07:29

我想对一个单独的元素应用一系列的lambda函数,而这个系列需要用yield来创建。

这些lambda函数的列表大概是这样的:

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

我想从左到右依次对这个单独的元素应用每一个函数,并且使用yield来构建一个可迭代的列表。

5 个回答

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

试试这个:

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

请注意,这不仅适用于没有名字的函数列表,也适用于任何一个参数的函数列表。这是因为在Python中,所有的函数,无论有没有名字,都是一等公民。你可以把它们放在一个列表里,之后再使用,就像上面演示的那样。

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

撰写回答