嵌套多个不带eval的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))

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

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

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

我不确定你想做什么。如果你有不同的功能,可以在单个元素上工作,请使用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)

最新更新