我想使用必须使用yield创建的iterable将lambda函数列表应用于单个元素。
lambda函数列表将具有如下内容:
[<function <lambda> at 0x1d310c8>, <function <lambda> at 0x1d355f0>]
我希望将每个函数从左到右应用到单个元素,使用yield来构造一个迭代来迭代列表
答案 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))