【问题标题】:Nest multiple yield functions without eval在没有 eval 的情况下嵌套多个 yield 函数
【发布时间】:2014-06-06 09:52:16
【问题描述】:

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

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

【问题讨论】:

    标签: python python-3.x iterator yield


    【解决方案1】:

    我不确定,你想做什么。如果您有不同的功能,适用于单个元素,请使用 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)
    

    【讨论】:

    • 在你的最后一个例子中,当你将相同的tuple 插入到地图中时,为什么要循环遍历 tuple 对象?还将将迭代函数映射到一个收益链中,而不是在将最终结果传递给list()之前逐个循环它们?
    猜你喜欢
    • 2022-06-14
    • 2020-12-08
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多