-1

我想处理 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() 中的两种结果吗?喜欢不同种类的发生器和不同的接收器想法?

4

2 回答 2

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()
于 2013-10-10T03:37:31.683 回答
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()

注意我删除了字符串,因为原始代码不使用字符串。如果你使用字符串,传递/接收一对进程函数和字符串作为@gnibbler 所做的元组。

于 2013-10-10T03:38:14.107 回答