2014-11-06 77 views
0

因此,生成器函數通過字符生成一個字符直到「」,現在我想要主函數調用生成器函數100次,以便它會創建一個帶有100話。正如我現在所說的那樣,它會調用100x的函數,但只能用一個字。我該怎麼做才能記住它已經使用過的詞語。Python:如何從文本中檢索第二個字

word = " " 
def generator(): 
    global word 
    with open("text.txt", "r") as file: 
     file.read(1) 
     for line in file: 
      for char in line: 
       if char != " ": 
        word += char 
       if char == " ": 
        return 

def main(): 
    words = [] 
    for i in range(100): 
     generator() 
     words.append(word) 
    print(words) 

if __name__ == '__main__': 
    main() 
+1

林不知道你瞭解一臺發電機是什麼... – 2014-11-06 19:31:31

+0

EMM ......我不知道你是什麼意思 – pirelius 2014-11-06 19:34:36

+1

發電機生成順序響應......每一個'的next()'(這是在'for x in y'語句中隱式地處理,並且也使用'yield'關鍵字)...這只是將文件讀入第一個空間並將其存儲在全局變量中 – 2014-11-06 19:36:33

回答

1
def word_generator(): 
    word = "" 
    with open("text.txt", "r") as file: 
     file.read(1) 
     for line in file: 
      for char in line: 
       if char != " ": 
        word += char 
       if char == " ": 
        yield word 
        word = "" 

,現在是發電機

它這樣使用

for word in word_generator(): 
    print word 

如果只想百強之首,你可以做

for i,word in enumerate(word_generator()): 
    if i > 100: 
     break 
    print word 
print "Last Word:",word 
+0

謝謝,多數民衆贊成在完美:) – pirelius 2014-11-06 19:37:43

+0

但我怎麼可能限制的話只有100? – pirelius 2014-11-06 19:39:35

1

你可以用創建一個生成器,並根據需要操縱發電機(比如說停在100)。

def make_generator(): 
    with open("text.txt", "r") as f: 
     for line in f: 
      for word in line.split(): 
       yield word 

def main(): 
    words = [] 
    generator = make_generator() 
    for i in range(100): 
     w = next(generator) 
     words.append(w) 
    print(words) 

if __name__ == '__main__': 
    main() 
相關問題