python 3打印生成器

时间:2014-08-01 04:53:43

标签: python python-3.x printing generator

当我处理print()函数(Python 3)时出现问题。

当我在寻找系列的总和时,我可以使用以下代码模式:

>>> sum(i for i in range(101))

但是当我倾向于检查我制作的系列时:(我选择print()并假设它会逐行打印出来)

>>> print(i for i in range(101))

事实证明,它成为没有返回值的生成器对象。所以我必须使用list()进行系列检查。这是印刷功能的缺陷吗?

PS:上面写的是一个形成生成器的例子,不是自然系列的最简单形式,而是复杂系列的骨骼结构。为了方便系列值检查,我正在寻找一种逐行打印每个值的方法。

2 个答案:

答案 0 :(得分:13)

sum需要一些可迭代的东西,而print需要单独的参数来打印。如果您想将所有生成器的项目分别提供给print,请使用*表示法:

print(*(i for i in range(1, 101)))

在任何一种情况下,你都不需要发电机,但是:

sum(range(1, 101))
print(*range(1, 101))

如果您希望将它们放在不同的行上,您就会期望对print进行多次单独调用的行为,这意味着您期望定期循环的行为:

for item in generator_or_range_or_whatever:
    print(item)

虽然您也可以选择将'\n'指定为项目分隔符:

print(*generator_or_range_or_whatever, sep='\n')

答案 1 :(得分:1)

这种行为与python2.x上没有太大区别:

Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> print (i*i for i in range(30))
<generator object <genexpr> at 0x10c034a50>

一般来说,如果你想真正了解这些项目,列表可能最简单(只需要添加几个方括号:

print [i*i for i in range(30)]

或在python3.x上:

print([i*i for i in range(30)])