2011-02-17 121 views
0

我有兩個問題與我的代碼 - 我不知道如何鏈接我的populateArray函數與我的主要功能;我不知道我需要通過什麼論證 另外,我一直有待打開的文件的文件路徑的問題 - 路徑是正確的,並存在數據文件。這裏是我的代碼:Python函數參數

network = [] 

def populateArray(): 
    file = open('theroute.txt', 'r') 
    network = [] 

    for line in file: 

     network.append(line) 

    print "Network = " 
    print network 

    file.close() 

def main():  
    if __name__ == "__main__": 
     populateArray() 

任何幫助,將不勝感激!

感謝您的答覆 - 我的代碼現在看起來像上面的,但是當我刪除高清的main():我收到以下錯誤:

File "populateArray.py", line 18 
    if __name__ == "__main__": 
          ^
IndentationError: unindent does not match any outer indentation level 
+0

刪除`def main():`行時,必須減少縮進。所以,unindent以下兩個讓'if __name__ ...'與列#0對齊 – redShadow 2011-02-17 23:52:13

+0

@ user612041 - 您已經正確地縮進程序。如果應該從col 1開始,而不是在def populateArray塊內。 – 2011-02-17 23:52:57

+0

感謝您的幫助 - 我現在得到了輸出,還有兩個地方,儘管我不介意 - 當我將文件數據解析到2D列表時,好玩的事情就開始了!我確信! – user612041 2011-02-18 00:40:01

回答

0

刪除不需要的第5行(extra「network = []」)和def main()。並將網絡作爲參數傳遞給populateArray函數,它將起作用。

network = [] 

def populateArray(network): 
    file = open('theroute.txt', 'r') 

    for line in file: 
     network.append(line)  
    file.close() 


if __name__ == "__main__": 
     print "Start" 
     populateArray(network) 
     print "Network = " 
     print network 

對於文件路徑:沒有路,你是在Python的主目錄指向(如C:\ Python27的Python 2.7)

如果使用/指向根目錄。指向您的主目錄指向目錄(例如/home/myuserid/theroute.txt或/Users/myuserid/theroute.txt)

1

的文件的路徑被打開的相對於你的.py文件的位置。例如,如果他們在同一個文件夾,那麼你可以簡單地做一個

file = open('theroute.txt', 'r') 

希望這會有所幫助。

5

刪除def main():,只是把它作爲:

if __name__ == "__main__": 
    populateArray() 

確保縮進你刪除DEF語句後正常程序。

如果您位於同一個目錄中,也可以直接引用您的文件名。

-1

如果您想在全局範圍內填充「網絡」列表(而不是「數組」),則需要將其全局化。

def populateArray(): 
    global network 
    # The rest of the function code goes here 

但是,我寧願做這樣的事情:

network = populateArray() 

,使populateArray()返回network列表。

或者您可以將網絡作爲參數傳遞給函數並對其進行處理(大多數對象都是通過Python中的引用傳遞的)。請記住,您不能在該功能內執行network = [],否則該參考將會丟失並被替換爲全新的對象。改爲使用del network[:]清空列表。

然後,當然,你要運行腳本時要執行的功能之外運行的東西,所以刪除def main()只得到:

if __name__ == "__main__": 
    populateArray() 

,或者,如果你想使用一個main()功能:

def main(): 
    populateArray() 

if __name__ == "__main__": 
    main() 

(雖然它是在該示例中..相當無用)

UPDATE:我剛剛注意到你正在調用你的文件對象file .. 不這樣做因爲file是Python內置對象的名稱(實際上是由open()返回的對象),它不會是一個非常好的主意給猴子補丁..

0
def parseLine(line): 
    # do something to input line! 
    return line.strip().split() 

def populateArray(fname, fn=None): 
    with open(fname, 'r') as inf: 
     if fn: 
      return map(fn, inf) 
     else: 
      return inf.readlines() 

def main(): 
    network = populateArray('/usr/jim/data/theroute.txt', parseLine) 

if __name__ == "__main__": 
    main() 
  • 全局幾乎都是設計

  • 差的標誌參數的功能,因此您可以在以後重新使用它們

希望這有助於!