我想要处理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种结果吗?喜欢不同类型的发电机和不同的接收机构?
答案 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的元组。