更好的治疗2种发电机导致python

时间:2013-10-10 03:31:47

标签: python generator

我想要处理2种发电机结果。例如:

import random
def gen():
    for _ in range(10):
        i=random.randint(0,100)
        if i%2:
            yield '_' + str(i)
        else:
            yield str(i)

def test():
    for i in gen():
        if i.startwith('_'):
            process1()
        else:
            process2()

除了if / else之外,还有更好的方法来测试test()中的2种结果吗?喜欢不同类型的发电机和不同的接收机构?

2 个答案:

答案 0 :(得分:2)

返回包含任意多个零碎的tuple

import random

def gen():
    for _ in range(10):
        i=random.randint(0,100)
        if i%2:
            yield True, str(i)
        else:
            yield False, str(i)

def test():
    for j, i in gen():
        if j:
            process1()
        else:
            process2()

import random

def gen():
    for _ in range(10):
        i=random.randint(0,100)
        if i%2:
            yield process1, str(i)
        else:
            yield process2, str(i)

def test():
    for fn, i in gen():
        fn()

答案 1 :(得分:1)

收益处理函数而不是字符串:

import random

def gen(): # OR gen(process1, process2)
    for _ in range(10):
        i = random.randint(0,100)
        if i % 2:
            yield process1
        else:
            yield process2

def test():
    for process in gen(): # OR gen(process1, process2)
        process()

注意我删除了字符串,因为原始代码不使用字符串。如果使用字符串,则传递/接收一对过程函数,将字符串作为@gibbler的元组。