【发布时间】:2020-08-20 22:13:45
【问题描述】:
尝试将生成器对象合并到我的代码中,但它无法正常工作。
def get_data():
data = some_api_call
result = data.json()
return result
结果如下所示,其中每个 {} 都在新行上:
{u'bytes_out': 1052.0, u'host': u'abc.com'}
{u'bytes_out': 52.0, u'host': u'def.com'}
{u'bytes_out': 5558.0, u'host': u'xya.com'}
...
def write_to_file(line):
#replacing the write statement with a print for testing
print(line)
def read_report(data):
for line in data:
yield line
def main():
alldata = get_data()
write_to_file(read_report(alldata))
我的期望是它应该打印出来:
{u'bytes_out': 1052.0, u'host': u'abc.com'}
{u'bytes_out': 52.0, u'host': u'def.com'}
{u'bytes_out': 5558.0, u'host': u'xya.com'}
但我得到的是:
<generator object read_report at 0x7fca02462a00>
不知道我在这里缺少什么
*** 编辑 - 修复了我使用不正确的问题
def main():
all_data = get_data()
for line in read_report(all_data)
print(line)
【问题讨论】:
-
read_report返回一个生成器。你为什么感到惊讶? -
虽然
print将为您调用str的参数,但generator.__str__不会通过迭代实例来构建字符串;它返回一个没有任何迭代的通用表示。 -
@DYZ 因为我错误地认为它会打印出生成器对象的 1 行我需要做什么才能获得预期的结果?
-
迭代器是可以循环的东西。这个生成器本质上是一个迭代器。