2016-05-07 18 views
3

Aus meiner Python-KonsoleDrucke mit Liste Verständnis

>>> numbers = [1,2,3] 
>>> [print(x) for x in numbers] 
1 
2 
3 
[None, None, None] 

Warum ist dieser Druck drei keiner am Ende ist?

+0

weil 'print()' ist eine Funktion in python3, die zurück 'None' –

+0

Der Python-Interpreter immer druckt der Wert eines Ausdrucks, den Sie eingeben. Wenn Sie es in "r = [Druck (x) für x in Zahlen]" geändert haben, würden Sie sehen, dass "r" jetzt "[Keine, keine, keine]" enthält. –

Antwort

3

Ein Listenverständnis ist nicht das richtige Werkzeug für die vorliegende Aufgabe. Es wird immer eine Liste zurückgeben und vorausgesetzt, dass print() zu None ausgewertet wird, wird die Liste mit Werten None gefüllt. Eine einfache for Schleife funktioniert besser, wenn wir eine Liste von Werten in der Erstellung, nur nicht daran interessiert sind, eine Funktion ohne Rückgabewert bei der Bewertung:

for x in numbers: 
    print(x) 
1

print ist eine Funktion in Python 3, die eine None zurückgibt. Da Sie es dreimal aufrufen, erstellt es eine Liste von drei Elementen None.

2

Die Funktion print gibt None zurück. Das Listenverständnis wendet die Funktion auf jedes Element der Liste an (Ausgabe der Ergebnisse), sammelt aber diese None Objekte in das Ergebnis-Array. Der Python-Interpreter druckt dieses Array.

3

Sie Ihre Schleife neu strukturieren sollten Argumente print() senden:

>>> numbers = [1,2,3] 
>>> print(*(x for x in numbers), sep='\n') 

Beachten Sie, dass Sie den expliziten Generator nicht benötigen. Genau die sich list auspacken:

>>> numbers = [1,2,3] 
>>> print(*x, sep='\n') 
1

Druck eine Funktion ist, es ist wie

>>>def f(x): 
...: pass 
>>>[f(x) for x in numbers] 
Verwandte Themen