多次调用时,Python函数行为不正常

时间:2014-04-05 18:34:38

标签: python-2.7

我在Python中编写了一个函数,它将在HTML中创建一个简单的四列表。当我从文件中调用它时,它会正确返回表。

但是,如果在单个脚本中多次调用它,则会出现问题。第一个出现应该如此。第二次调用时,标题行下面的所有行都有六列(两个空白)而不是四列。第三次,有十列(六个空白)。

我最近才开始编码,所以我不太了解幕后发生的事情。

当一个函数连续调用两次或多次时,该函数的新实例是否被调用?变量是否全部重置'可以这么说?

这是被调用函数的代码:

def fourColumnTable(title1, list1, title2, list2, title3, list3, title4, list4):
    error = 0
    #Check that the lists are all of the same length
    if(len(list1) != len(list2) or len(list1) != len(list3) or len(list1) != len(list4)):
        error = 1
        table = "ERROR: The lists must all be the same length"

    if(error == 0):
        tableList = []
    #Append <table> tag
        tableList.append('<table class="table table-bordered">')

    #Format list elements and titles
        #Put each title inside <th> tags
        titleList = []
        titleList.append(title1)
        titleList.append(title2)
        titleList.append(title3)
        titleList.append(title4)
        for i in range(len(titleList)):
            titleList[i] = "<th>" + str(titleList[i]) + "</th>"

        #Put each string element inside <td> tags
        for i in range(len(list1)):
            list1[i] = "<td>" + str(list1[i]) + "</td>"
        for i in range(len(list2)):
            list2[i] = "<td>" + str(list2[i]) + "</td>"
        for i in range(len(list3)):
            list3[i] = "<td>" + str(list3[i]) + "</td>"
        for i in range(len(list4)):
            list4[i] = "<td>" + str(list4[i]) + "</td>"

    #Put all list elements in the tableList
        tableList.append('<thead>')
        for i in range(len(titleList)):
            tableList.append(titleList[i])
        tableList.append('</thead>')
        tableList.append('<tbody>')
        for i in range(len(list1)):
            tableList.append('<tr>')
            tableList.append(list1[i])
            tableList.append(list2[i])
            tableList.append(list3[i])
            tableList.append(list4[i])
            tableList.append('</tr>')
        tableList.append('</tbody>')

    #Close the <table> tag
        tableList.append('</table>')

    #Assign tableList to one variable
        table = ''.join(tableList)
    return table

1 个答案:

答案 0 :(得分:0)

我怀疑在调用之间重用了一些(但不是全部)listN个参数。这会导致您的错误,因为您的代码会在每次调用时修改提供的列表。它会在每个列表项周围添加<td></td>。如果您在同一列表中重复执行此操作,则这些项目将以多个嵌套标记结束,例如<td><td><td>...</td></td></td>

然后将其呈现为额外的空列,因为您的浏览器会在重复的<td>开始标记之间填充缺少的结束标记,并忽略最后的额外结束标记。

第一个快速修复方法是使用修改后的项目创建新列表,而不是修改提供的列表(此处使用列表推导):

list1 = ["<td>" + item + "</td>" for item in list1]

进一步的改进是使用库来创建表,而不是自己通过字符串操作来创建它。您可以使用各种XML模板库,但我没有足够的经验来提出强有力的建议。 This page可能是开始浏览的好地方。