1

我正在我的交互式 shell 中测试一些 Django 功能

这是我尝试探测这些对象的尝试,请注意最后的无列表

>>> [print(foo) for foo in CharacterSkillLink.objects.all() if foo.speciality]
Streetwise (Street Countdown) Roran
[None]

并且具有更正统的列表理解:

>>> [print(foo) for foo in range(1,10)]
1
2
3
4
5
6
7
8
9
[None, None, None, None, None, None, None, None, None]

九个无,一排一排。

为什么我会这样?

4

2 回答 2

6

因为print返回一个值,即None. 它打印的内容和返回的内容是两件不同的事情。

于 2015-02-11T09:35:50.377 回答
1

这是因为,您使用 Python 3.x,其中 print函数在打印到控制台后返回 None ,因此您将获得此输出。然而,如果您使用过 Python 2.x,您将正确获得 print 函数的 SyntaxError。

一个更好的例子是这个(在 python 2.x 中,因为你的例子在 python 2.x 中不起作用)

>>> b = []
>>> [b.append(i) for i in range(10)]
...[None, None, None, None, None, None, None, None, None, None]
>>> print b
...[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如果你想打印东西并将其添加到列表中,它应该是这样的:

[(print(foo) or foo) for foo in CharacterSkillLink.objects.all() if foo.speciality]

但是,在我看来,不要使用一段时间后事情可能会变得丑陋的东西。

于 2015-02-11T09:43:03.850 回答