如何在python中将循环数据从一个函数传递到另一个函数?

时间:2012-02-03 19:56:31

标签: python-2.7

我试图将多行列表从一个函数传递到另一个函数,但我无法弄清楚它是如何完成的。这是我到目前为止的代码:

def readfile():
'''Read a text file; return a string holding the text'''
    f = open("numbers.txt", 'r')
    line = f.readlines()             
    f.close()           
    return line  

def dataConversion(lines):

    lst = []
    for element in lines:
        lst = element.strip()
        lst = map(int, lst)
        print lst        
return lst

def evenNumberList(lsts):
    print lsts

def main():    

    lines = readfile()   
    lsts = dataConversion(lines)
    doubledList = evenNumberList(lsts)

main()

dataConversion(lines)函数的输出是:

[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 0, 2, 6, 2, 6]
[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 1, 0, 7, 0, 7]
[4, 0, 1, 2, 8, 8, 8, 8, 8, 8, 8, 8, 1, 8, 8, 1]
[4, 5, 5, 2, 7, 2, 0, 4, 1, 2, 3, 4, 5, 6, 7, 7]
[4, 5, 3, 9, 9, 9, 2, 0, 4, 3, 4, 9, 1, 5, 6, 2]
[4, 9, 9, 2, 7, 3, 9, 8, 7, 1, 6, 0, 0]
[4, 9, 9, 2, 7, 3, 9, 8, 7, 0, 0, 1, 7]
[8, 0, 8, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 5, 8, 8, 3, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 4, 9, 1, 9, 4, 6, 9, 1, 5, 4, 4, 4, 9, 2, 3]
[5, 4, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 8]
[3, 7, 8, 2, 8, 2, 2, 4, 6, 3, 1, 0, 0, 0, 5]
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1]
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1]
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 0]
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 1]
[6, 0, 4, 1, 2, 7, 3, 9, 9, 0, 1, 3, 9, 4, 2, 4]
[6, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7]
[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4]

虽然evenNumberList(lsts)函数的输入是:

[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4]

如何让它们匹配?我需要evenNumberList(lsts)函数中的所有代码行,而不仅仅是一行。我的教授告诉我,我需要在循环内调用该函数,但我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:0)

我会像这样编写你的代码:

def dataConversion(lines):
  temp = []

  for element in lines:
    converted = map(int, element.strip())
    temp.append(converted)

  return temp

def evenNumberList(lsts):
  return lsts

if __name__ == '__main__':
  lines = open("numbers.txt", 'r').readlines()   
  lsts = dataConversion(lines)
  doubledList = evenNumberList(lsts)

  print lsts
  print doubledList

您遇到的主要问题是正确使用returnprint return。您的evenNumberList()函数完全没有返回。

此外,在dataConversion()中,您在空列表中使用map(),这也没有产生实际输出。

我的经验法则:不要在函数中使用print语句。将它们从函数中移除到实际程序中,因为错误更容易被捕获。

答案 1 :(得分:0)

dataConversion()中,每次循环都会重新绑定lst变量,因此您只返回最后一次迭代的结果数据。

您的主循环表示您希望从此函数获得的内容是lsts或多个列表,但您只返回一个。

为了帮助您入门,在dataConversion()中您应该创建一个将作为返回值的变量,可以将其称为lstslist_of_lists,然后在for循环中执行{{1}其中lsts.append(lst)是您当前从lst创建的整数列表。