2013-07-29 33 views
-4

我想在我正在寫的腳本中使用相同的定義。我可以讓def工作一次,但不是第二次,任何幫助都會很棒。Python定義運行不止一次

def def_test(name): 
    COUNT = 0 
    Totals = {} 
    for line in file_1: 
     if COUNT == 0: 
      COUNT +=1 
      continue 
     else: 
       quantity = float(line[12]) 
       persons_name = line[14].strip(" ") 
       if persons_name == name: 
        print(name) 

if __name__ =="__main__": 
    def_test("Adam") 
    def_test("Bob") 

我如何在第二次通過時尋找「Bob」?

+4

什麼是file_1的定義是什麼? –

+2

什麼是錯誤?另外,函數調用不應該是'test(...)'? –

+3

你是不是指'test(「Adam」)'?如果不是,那麼'name()'的定義是什麼? –

回答

4

由於問題中沒有足夠的信息(當時我寫這個...),我的猜測是你在代碼中的其他地方打開文件,file_1是對打開文件。當你迭代它時,你正在閱讀文件的末尾。您將需要重置file_1以指向文件的開頭。從概念上講,最簡單的方法是關閉並重新打開它。

除非明確說明在代碼的其他部分打開文件的原因,否則循環遍歷文件行的慣用方法是使用with語句,該語句打開文件,運行代碼,然後自動關閉它。

例如:

with open("the_file.txt", "r") as file_1: 
    for line in file_1: 
     ... 

打開文件是做一個相對低效的事情,但對於像你這樣一個簡單的程序開銷可以忽略不計。如果你每秒打開這個文件幾百次或更多,打開它只有一次是有道理的。在這種情況下,您可以使用名爲seek的命令將內部指針移回文件的起始位置。我建議你適應with,並且只有在確定自己確實存在性能問題時纔開始考慮打開文件並使用seek

+0

這樣做。有一種更有效的方式,我應該這樣做嗎? –

+0

'file_1.seek(0)'也會關閉並重新打開文件。 – kindall

+0

@ kindall:正確。但是,由於OP顯然沒有真正的文件概念,所以我不想將它們混淆。 –

2

你可以試試這個:

def def_test(name): 
    COUNT = 0 
    Totals = {} 
    with open('file', 'r') as file_1: #open file each time you call function 
     for line in file_1: 
      if COUNT == 0: 
       COUNT +=1 
       continue 
      else: 
       quantity = float(line[12]) 
       persons_name = line[14].strip(" ") 
       if persons_name == name: 
        print(name)