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

2024-04-25 05:42:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用iterable将lambda函数的列表应用到一个元素,它必须使用yield创建。在

lambda函数的列表如下所示:

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

我想把每个函数从左到右应用到一个元素,使用yield构造一个iterable来迭代列表


Tags: lambda函数元素列表functioniterableatyield
3条回答

答案可以表述为

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函数起作用,其余的只是为了演示。在

试试看:

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中的第一类对象。您可以将它们存储在一个列表中,稍后再使用,如上面所示。在

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

用法示例:

^{pr2}$

给予

<type 'int'>
20326112
0x37

相关问题 更多 >