2017-02-22 2 views
0

Eine Frage in Bezug auf die Variable in einer for-Schleife initialisiert:Funktion der initialisierten Variable in der For-Schleife zuweisen?

Das Setup:

from urllib import urlopen 

WORD_URL = "http://learncodethehardway.org/words.txt" 

WORDS = [] 

Meine Frage ist, wenn die Worte aus der URL in die leere Liste WORTE Laden auf, warum funktionierts:

for word in urlopen(WORD_URL): 
    WORDS.append(word.strip()) 

Während dies nicht?

for word.strip() in urlopen(WORD_URL): 
    WORDS.append(word) 

Per mein Verständnis kann eine Funktion auf der initialisierte Variable in einer for-Schleife bezeichnet werden, solange die Art der variablen unterstützt diese Funktion.

In diesem Fall ist der Typ der initialisierten Variablen ein String mit einem Newline am Ende, also würde ich denken, dass word.strip() funktionieren würde. Stattdessen erhalte ich den folgenden Fehler:

File "<stdin>", line 1 
SyntaxError: can't assign to function call 

Warum ist das?

+1

Zuweisung (einschließlich in 'für' Anweisungen) funktioniert nicht so - Sie vergeben Werte für * Namen *, nicht für * Ausdrücke *. Gedankenexperiment: Wenn das funktionierte, was würde "für" ein tatsächliches String-Literal ".strip() in urlopen (WORD_URL) bedeuten:' tun? –

+0

Entschuldigung, ich verstehe nicht. –

+0

Wie ich verstehe, ist Wort ein Name; d. h. eine Variable, die im Vorlauf in der for-Schleife erzeugt wird. Wenn strip() in einem Bereich für ein Wort aufgerufen werden kann, warum nicht in einem anderen? Außerdem habe ich Ihren Code durch den Interpreter laufen lassen und es gab den gleichen Fehler wie oben - nicht wirklich verstanden - danke für Ihre Geduld im Voraus - aber könnten Sie bitte mit mehr Codebeispielen arbeiten? –

Antwort

0

Ich verstehe jetzt; was ich versuchte, funktionierte nicht zu tun, weil:

for word in urlopen(WORD_URL): 

ein Ausdruck ist für einen Gegenstand iterieren, so das Band() -Methode auf dem frisch gebackenen Variable Wort Aufruf macht keinen Sinn an dieser Stelle machen .

Die offensichtliche Antwort war, einfach die Methode strip() auf dem Variablenwort innerhalb des For-Schleifenblocks aufzurufen.

@Zero Piraeus Ihre Geduld wird geschätzt.

Verwandte Themen