处理一个列表或单个整数作为参数

函数应该根据行名选择表中的行(在这种情况下为第2列)。 它应该能够将单个名称或名称列表作为参数并正确处理它们。

这就是我现在所拥有的,但理想情况下不会有这个重复的代码,并且类似异常的东西将被智能地用来选择正确的方式来处理输入参数:

def select_rows(to_select):
    # For a list
    for row in range(0, table.numRows()):
        if _table.item(row, 1).text() in to_select:
            table.selectRow(row)
    # For a single integer
    for row in range(0, table.numRows()):
        if _table.item(row, 1).text() == to_select:
            table.selectRow(row)

其实我同意上面的Andrew Hare,只是通过一个单一元素的列表。

但是如果你真的必须接受一个非列表,那么在那种情况下把它变成一个列表呢?

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)

在单个项目列表中执行'in'的性能损失不可能很高:-)但是,如果您的'to_select'列表可能很长,您可能会考虑执行另一项操作:考虑投射它设置为使查找更有效。

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)

-----ñ


您可以重新定义您的函数以获取任意数量的参数,如下所示:

def select_rows(*arguments):
    for row in range(0, table.numRows()):
        if _table.item(row, 1).text() in arguments:
            table.selectRow(row)

然后你可以像这样传递一个参数:

select_rows('abc')

像这样的多个参数:

select_rows('abc', 'def')

如果你已经有一个列表:

items = ['abc', 'def']
select_rows(*items)

我会这样做:

def select_rows(to_select):
    # For a list
    for row in range(0, table.numRows()):
        if _table.item(row, 1).text() in to_select:
            table.selectRow(row)

并期望这个论点永远是一个列表 - 即使它只是一个元素的列表。

记得:

请求宽恕比允许要容易。

链接地址: http://www.djcxy.com/p/54235.html

上一篇: Handle either a list or single integer as an argument

下一篇: Python check if all elements of a list are the same type