1

対話型シェルでいくつかの Django 機能をテストしています

これらのオブジェクトをプローブしようとする私の試みは次のとおりです。最後にある Nones のリストに注意してください

>>> [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]

9つのNones、すべて一列に並んでいます。

なぜ私はそれを手に入れたのですか?

4

2 に答える 2

6

print値を返すため、つまりNone. 表示されるものと返されるものは 2 つの異なるものです。

于 2015-02-11T09:35:50.377 に答える
1

これは、コンソールに出力した後に print関数が None を返す Python 3.x を使用しているため、この出力が得られるためです。一方、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 に答える