为什么我的Python交互式shell中的列表理解会附加一个非的列表?

2024-10-03 06:21:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在测试我的交互式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]

九个一个,都是连续的。你知道吗

为什么我会这样?你知道吗


Tags: django方法in功能none列表forobjects
2条回答

这是因为,您使用python3.x,其中print函数在打印到控制台后返回None,因此您得到这个输出。然而,如果您使用了Python2.x,您将正确地得到print函数的语法错误。你知道吗

更好的例子是这样的(在Python2.x中,因为您的示例在Python2.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]

然而,在我看来,不要使用这样的东西,因为事情可能会在一段时间后变得丑陋。你知道吗

因为print返回一个值,即None。它打印什么和返回什么是两码事。你知道吗

相关问题 更多 >