2011-02-17 88 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() 
  • 全局几乎都是设计

  • 差的标志参数的功能,因此您可以在以后重新使用它们

希望这有助于!