Wie Oscar López und andere bereits erklärt haben, ist extend ein Befehl, der None zurückgibt, um die Trennung von Befehlen und Abfragen einzuhalten.
Sie haben alle vorgeschlagen, dies zu beheben, indem Sie wie gewünscht extend als Befehl verwenden. Aber es gibt eine Alternative: Verwenden Sie stattdessen eine Abfrage:
%Vor% Es ist wichtig, den Unterschied hier zu verstehen. extend
ändert Ihre [0]
und verwandelt sie in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
. Aber der Operator +
lässt Ihre [0]
allein und gibt eine neue Liste [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
zurück.
In Fällen, in denen Sie andere Verweise auf die Liste haben und sie alle ändern möchten, benötigen Sie natürlich extend
.
Wenn Sie jedoch nur [0] als Wert verwenden, können Sie mit +
nicht nur kompakten, flüssigen Code schreiben (wie Sie es versuchten), sondern auch mutierende Werte vermeiden. Dies bedeutet, dass derselbe Code funktioniert, wenn Sie unveränderliche Werte (wie Tupel) anstelle von Listen verwenden, aber wichtiger ist, dass dies für einen Stil der funktionalen Programmierung wichtig ist, der Nebenwirkungen vermeidet. (Es gibt viele Gründe, warum dieser Stil nützlich ist, aber eine offensichtliche ist, dass unveränderliche Objekte und Funktionen ohne Nebenwirkungen von Natur aus threadsicher sind.)
list.extend
ist ein In-Place Methode. Es führt seine Aktion für das Objekt selbst aus und gibt None
zurück.
Das würde funktionieren:
%Vor%Noch besser wäre das:
%Vor%Damit der Code in der Frage funktioniert, müssen Sie Folgendes tun:
%Vor% Es hat vorher noch nicht funktioniert, weil extend () None
zurückgibt, und zwar per Entwurf: Python hält sich an Befehl / Abfrage Trennung .