python中对两种生成器结果的更好处理

2024-04-25 23:58:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想处理两种生成器结果。e、 g:

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()中的两种结果?像不同种类的发生器和不同的接收器


Tags: intestimportforifdefrangerandom
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()

生成过程函数而不是字符串:

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那样传递/接收一对process函数和tuple字符串

相关问题 更多 >