打印不在生成器表达式中工作

时间:2017-10-24 02:26:58

标签: python python-3.x

我希望看到数字1-9的组合列表,但不会打印任何内容。我错过了什么?

import itertools

def PrintIt(num):
    print(num)
    return True

nums = itertools.permutations(range(1, 10))

x = (num for num in nums if PrintIt(num)) # Prints nothing

如果我print(list(x)),它会按预期打印所有不同的排列。

1 个答案:

答案 0 :(得分:2)

发生这种情况的原因是因为您要将x分配给生成器表达式。除非需要,否则生成器表达式不进行任何计算。要强制计算,更简单的方法是强制它成为一个列表。在那种情况下,你迫使Python制作一个列表,所以python必须执行所有的计算,包括测试你的打印位置。所以你可以这样打印:

x = [num for num in nums if PrintIt(num)]

x = (num for num in nums if PrintIt(num))
list(x)

顺便说一句,你不需要拥有打印功能,你可能刚刚完成了:

x = [num for num in nums if print(num)]

但是使用if不测试某些条件但仅仅是因为你在这里做的副作用是最好的辩论。这就是我写你的程序的方式:

import itertools
nums = itertools.permutations(range(1, 10))
for num in nums:
    print(num)