Handle either a list or single integer as an argument

后端 未结 6 884
萌比男神i
萌比男神i 2020-12-05 01:59

A function should select rows in a table based on the row name (column 2 in this case). It should be able to take either a single name or a list of names as arguments and ha

6条回答
  •  孤街浪徒
    2020-12-05 02:32

    Actually I agree with Andrew Hare's answer, just pass a list with a single element.

    But if you really must accept a non-list, how about just turning it into a list in that case?

    def select_rows(to_select):
        if type(to_select) is not list: to_select = [ to_select ]
    
        for row in range(0, table.numRows()):
            if _table.item(row, 1).text() in to_select:
                table.selectRow(row)
    

    The performance penalty for doing 'in' on a single-item list isn't likely to be high :-) But that does point out one other thing you might want to consider doing if your 'to_select' list may be long: consider casting it to a set so that lookups are more efficient.

    def select_rows(to_select):
        if type(to_select) is list: to_select = set( to_select )
        elif type(to_select) is not set: to_select = set( [to_select] )
    
        for row in range(0, table.numRows()):
            if _table.item(row, 1).text() in to_select:
                table.selectRow(row)
    

提交回复
热议问题