2017-02-22 151 views
0

關於在for循環初始化的變量的一個問題:將函數賦值給For循環中的初始化變量?

的設置:

from urllib import urlopen 

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

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)中的「for」實際字符串文字「.strip()做什麼:'做什麼? –

+0

對不起,我不明白。 –

+0

據我瞭解,單詞是一個名字;即在for循環中動態創建的變量。如果strip()可以在一個區域被調用,爲什麼不能在另一個區域?另外,我通過解釋器運行你的代碼,它給出了與上面相同的錯誤 - 不是真正的理解 - 提前感謝你的耐心 - 但是你能否詳細說明更多代碼示例? –

回答

0

我現在明白了;我試圖做是行不通的,因爲:

for word in urlopen(WORD_URL): 

設計遍歷一些對象的表達式,因此呼籲新崛起的變量字帶()方法,在這一點上沒有任何意義。

顯而易見的答案是簡單地在for循環塊內的變量字上調用strip()方法。

@Zero比雷埃夫斯你的耐心是讚賞。