如何使用迭代器将一系列lambda函数应用于单个元素?
我想对一个单独的元素应用一系列的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