python中列表理解的异常行为

python中列表理解的异常行为,python,python-3.x,list-comprehension,Python,Python 3.x,List Comprehension,我试图理解python中的列表理解,我遇到了列表理解的这种行为。当我这样做时: [在(0,10)范围内为y打印(y)]它给出响应 0 1 2 3 4 5 6 7 8 9 [None, None, None, None, None, None, None, None, None, None] 我知道它打印0到9,但我不明白为什么它打印None。但是当我打印o=[打印(y)范围内的y(0,10)]时,它会打印 0 1. 2. 3. 4. 5. 6. 7. 8. 9 这次没有任何none,我无法通过

我试图理解python中的列表理解,我遇到了列表理解的这种行为。当我这样做时:
[在(0,10)范围内为y打印(y)]
它给出响应

0
1
2
3
4
5
6
7
8
9
[None, None, None, None, None, None, None, None, None, None]
我知道它打印0到9,但我不明白为什么它打印
None
。但是当我打印
o=[打印(y)范围内的y(0,10)]
时,它会打印

0
1.
2.
3.
4.
5.
6.
7.
8.
9


这次没有任何
none
,我无法通过搜索找到任何相关资料,请有人解释一下,谢谢,因为你基本上是在做这样的事情:

x = []
for y in range(0,10):
    x.append(print(y))

print(x)


您应该尝试
[y代表范围(10)中的y]

这是因为打印功能将输出打印到控制台,而不是列表。这将给出您的结果:

[y for y in range(0,10)]


print
函数返回
None
,您可以将这些
None
放入列表中。元素是函数返回的内容,而不是屏幕上打印的内容。屏幕上的打印部分是
打印
功能的一部分


因为已经有很多其他答案显示了您可能想要做的事情,所以我不会在这里重复这些答案。

如果您从解释器中键入任何内容,它将回显函数或表达式返回的任何内容,除非它是
None
(默认值)

例如:

>>> 1+1
2
类似地,在构建表达式时执行
print
函数调用,但是
None
s列表实际上是表达式的结果

你可能想用它做点什么,所以:

[y for y in range(0,10)]
或:


更有意义。
print
函数打印值,但随后返回
None
,并且打印的值丢失。

不会。
None
是从其他位置打印的。也许你打印了([print(y)for y in range(0,10)])?你在jupyter上吗?Jupyter将在cellno中打印最新语句的返回对象我正在Ubuntu上使用内置python解释器@ChrisNo我做了我所问的@guy在文件中编写第一个命令并执行该文件将为您提供第二个输出(没有
None
s)OP不想将结果附加到列表中。这是将代码打印(范围(0,10)中的[y代表i)]简化为挑剔的列表理解,在Python 3中,
print
不再是一个语句,而是一个函数,这里使用的就是这个函数。事实上,
print
函数调用仍然是一个语句。你是对的,虽然
print
本身不再是一个有效的语句,需要作为函数调用,但是你可以看出,由于我在最后一行中所说的,我已经意识到了这一点。我不认为我所说的有任何错误或混淆。是的,任何表达式(包括函数调用)都是一个语句,所以我的措辞并不真正正确。但不是每个语句都有返回值,但函数有返回值。这就是这里的主要要点,也是为什么我认为有必要指出,
print
是一个函数,而不仅仅是一个语句。正如我所说,只是吹毛求疵,答案很好。
[y for y in range(0,10)]
mylist = [y for y in range(0,10)]