2013-03-26 118 views
1

爲了標記文件,我有一個生成器將文件的空白分隔部分吐出,忽略換行符。堆棧生成器

def parts(filename): 
    file = open(filename, 'r') 
    for line in file: 
    for part in line.split(): 
     yield part 

現在,我想編寫一個發電機理解 - 什麼沒有工作是:

p = (part for part in line.split() for line in file) 

p = (part for part in (line.split() for line in file)) 

後者吐出來的是分裂線而不是分割線的部分

+1

我喜歡的矛盾「whitespaceseparated」) – georg 2013-03-26 09:37:19

+1

沒有,後者是一個語法錯誤 – Eric 2013-03-26 09:37:56

回答

6

使用此語法:

p = (part for line in file for part in line.split()) 

生成器表達式中最外面的for循環是左邊的那個。

+2

+1,循環的理解寫在相同的順序爲正常 – georg 2013-03-26 09:33:56

+0

它也可以幫助人們墊發電機在不同的行上表達出來以顯示循環的工作方式。 – jamylak 2013-03-26 11:03:44

1
(word for line in input_file for word in line.split()) 
+1

word是indead變量的更好名稱 – Hoffmann 2013-03-26 09:44:23