当我处理print()函数(Python 3)时出现问题。
当我在寻找系列的总和时,我可以使用以下代码模式:
>>> sum(i for i in range(101))
但是当我倾向于检查我制作的系列时:(我选择print()并假设它会逐行打印出来)
>>> print(i for i in range(101))
事实证明,它成为没有返回值的生成器对象。所以我必须使用list()进行系列检查。这是印刷功能的缺陷吗?
PS:上面写的是一个形成生成器的例子,不是自然系列的最简单形式,而是复杂系列的骨骼结构。为了方便系列值检查,我正在寻找一种逐行打印每个值的方法。
答案 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)])