Python函数参数

时间:2011-02-17 23:27:02

标签: python

我的代码存在两个问题 - 我不确定如何将populateArray函数与main函数链接;我不确定我需要通过什么论点 此外,我一直在打开要打开的文件的文件路径 - 路径是正确的,文件存在数据。这是我的代码:

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()

任何帮助将不胜感激!

感谢您的回复 - 我的代码现在看起来如上所示,但是当我删除 def main()时:我收到以下错误:

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

5 个答案:

答案 0 :(得分:5)

删除def main():,只需将其设为:

if __name__ == "__main__":
   populateArray()

确保在删除def stmt后正确缩进程序。

如果您在同一目录中,也可以直接引用您的文件名。

答案 1 :(得分:1)

要打开的文件的路径是相对于.py文件的位置。例如,如果它们位于同一文件夹中,那么您只需执行

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

希望这有帮助。

答案 2 :(得分: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()
  • 全局变量几乎总是设计不佳的标志

  • 参数化您的功能,以便日后重复使用

希望这有帮助!

答案 3 :(得分:0)

删除第5行(额外的“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主目录(例如,Python 2.7的C:\ Python27)

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

答案 4 :(得分:-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()

(虽然在这个例子中它很无用..)

更新:我刚刚注意到您正在调用文件对象file .. 不要这样做,因为file是一个名称Python内置对象(实际上由open()返回的对象),并且修补它不是一个好主意..