gpt4 book ai didi

python - 如何将额外的结果从 python 生成器发送到消费者函数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:22:15 25 4
gpt4 key购买 nike

我有一个库函数(我无法更改),它将提供特定类型对象的迭代器作为输入。我将这个输入实现为一个生成器,它解析文本并生成其中的一部分。我希望能够考虑在文本解析过程中发现的其他信息。

以下示例中的注释说明了我想做什么:

the_text = """1:-
3:-
2:+
4:-
6:+
2:-
4:-
5:+
6:-
7:+"""

def extract_ints(text):
for line in text.split("\n"):
fields = line.split(":")
#<send fields[1] to my_consumer_function>
yield fields[0]

# Cannot modify this one (actually loaded from library)
def double_ints(num_source):
"""Only wants numbers."""
for num in num_source:
yield 2 * int(num)

def my_consumer_function(text):
for value in double_ints(extract_ints(text)):
#<receive sign from extract_ints>
#if sign == "-":
# value *= -1
print(value)

my_consumer_function(the_text)

我如何继续将此信息从我的生成器发送到我的消费者函数以及不可修改的库函数的输出?

最佳答案

我想知道什么是最好的方法,但这是一种方法:

from itertools import imap, izip, tee
from operator import itemgetter

def extract_ints(text):
for line in text.split("\n"):
fields = line.split(":")
yield fields[0], fields[1]

def my_consumer_function(text):
it1, it2 = tee(extract_ints(text))
it1 = double_ints(imap(itemgetter(0), it1))
it2 = imap(itemgetter(1), it2)
for value, sign in izip(it1, it2):
if sign == "-":
value *= -1
print(value)

对于 Python 3,使用常规 mapzip

关于python - 如何将额外的结果从 python 生成器发送到消费者函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40678346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com