2017-02-22 14 views
0

ループのために初期化された変数に関する質問:Forループの初期化された変数への関数の割り当て?

セットアップ:

from urllib import urlopen 

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

WORDS = [] 

私の質問で、空のリストWORDSにURLから単語をロードするときに、この作業を行い理由:

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

これはありませんが、私の理解パー

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

は、関数が限りのタイプが言ったように、変数は、その機能をサポートし、forループで初期化された変数の上で呼び出すことができます。

この場合、初期化された変数の型は、最後に改行が付いた文字列であるため、word.strip()が機能すると思います。代わりに、次のエラーが表示されます。

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

なぜですか?

+1

代入( 'for'文を含む)は、そのようには動作しません。*式*ではなく*名前*に値を代入します。思考実験:これがうまくいくなら、urlopen(WORD_URL)の実際の文字列リテラル ".strip()は何でしょう?" –

+0

申し訳ありませんが、わかりません。 –

+0

私は単語が名前だと理解しています。すなわちforループ内でオンザフライで作成された変数である。 strip()をある領域の単語に対して呼び出すことができれば、別の領域でそれを使用できないのはなぜですか?また、私はあなたのコードをインタプリタで実行しましたが、上記と同じエラーが発生しました。実際には理解できませんでした。あらかじめ忍耐していただきありがとうございます。 –

答えて

0

私は今理解しています。

for word in urlopen(WORD_URL): 

は、いくつかのオブジェクトを反復処理するために設計された式ですので、この時点では意味がありません新しく鋳造変数単語でのストリップ()メソッドを呼び出すと、:ので、私は何をしようとしていたことは働いていませんでした。

明らかな答えは、forループブロック内の変数ワードに対して単にstrip()メソッドを呼び出すことでした。

@Zero Piraeusあなたの忍耐は高く評価されます。

関連する問題