打印和写出生成器对象

printing and writing out a generator object

正在尝试将生成器对象合并到我的代码中,但不知为何无法正常工作。

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)

您也可以直接从生成器打印:

gen = range(1,10)
print(*gen, flush=True)
#out: 1 2 3 4 5 6 7 8 9

所以对于你的情况:

print(*read_report(all_data), flush=True)