2017-02-22 177 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比雷埃夫斯你的耐心是赞赏。