首页 > 解决方案 > Python在尝试打印时返回一个生成器对象?

问题描述

所以我尝试使用列表理解进行打印,我想在迭代中单独打印每个元素。有问题的代码:

str1 = "You don't know how amazing it is to learn how to program!"

list1 = str1.split(" ")

print(i.upper() for i in list1 if len(i) > 5)

但是当我尝试运行代码时,它会吐出:

<generator object <genexpr> at 0x000001F4212233C0>

期望的输出是:

AMAZING
PROGRAM!

除了使用普通的 for 循环之外,我还能在这里使用print()函数内部的一行代码来实现我想要的吗?

标签: pythonpython-3.x

解决方案


表格

(i.upper() for i in list1 if len(i) > 5)

是生成器表达式 (a genexpr)。在迭代之前它不会有值,并且print()不会自行迭代对象。(它只用它们生成字符串,并且<generator object <genexpr>>是生成器表达式的字符串形式。

要解决此问题,您有几个选择(除了使用列表推导):

  • 在genexpr 上使用"\n".join()以使其成为由换行符连接的字符串:
    print("\n".join(i.upper() for i in list1 if len(i) > 5))
    
  • print您可以使用*运算符将​​生成器表达式转换为参数,并print通过换行符来分隔值:
    print(*(i.upper() for i in list1 if len(i) > 5), sep="\n")
    

推荐阅读