嵌套多个yield函数而不使用eval

时间:2014-04-22 06:54:32

标签: python python-3.x iterator yield

我有以下结构(可能需要返工,但对我来说这感觉很自然):

def get(baseVar):
    if type(baseVar) == GeneratorType:
        yield from baseVar
    else:
        yield baseVar

def multiply(baseVar):
    if type(baseVar) == GeneratorType:
        for item in baseVar:
            yield item*2
    else:
        yield baseVar*2

funcs = {'get' : get, 'multiply' : multiply}
result = 10
for f in funcs:
    result = funcs[f](result)

print(list(result))

另一种方法是(但这根本不是动态的)性能明智地工作就像我想要的那样,迭代器对象被传递给每个函数,从而从函数中获得更多的动力(理论上): p>

for result in multiply(get(10)):
    ...

如何在一行中嵌套多个yield函数并传递生成器对象而不对函数名称getattr进行硬编码?

1 个答案:

答案 0 :(得分:0)

我不确定,你想做什么。如果您有不同的功能,可以使用map:

def get(x):
    return x

def multiply(x):
    return x*2

print(list(map(multiply,map(get,[10]))

您希望如何获得您的名字?从外部来源,然后你的dict是正确的方式,从内部,然后你可以直接使用这些函数:

funcs = (get, multiply)
result = [10]
for f in funcs:
    result = map(funcs,result)