Ste*_*ing 37 python integer function list
函数应根据行名称选择表中的行(在本例中为第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)
Run Code Online (Sandbox Code Playgroud)
Nic*_*oic 23
实际上我同意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)
Run Code Online (Sandbox Code Playgroud)
在单项列表上进行"输入"的性能损失可能不高:-)但是这确实指出了如果你的'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)
Run Code Online (Sandbox Code Playgroud)
Ste*_*eef 18
您可以重新定义函数以获取任意数量的参数,如下所示:
def select_rows(*arguments):
for row in range(0, table.numRows()):
if _table.item(row, 1).text() in arguments:
table.selectRow(row)
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样传递一个参数:
select_rows('abc')
Run Code Online (Sandbox Code Playgroud)
像这样的多个参数:
select_rows('abc', 'def')
Run Code Online (Sandbox Code Playgroud)
如果你已经有一个清单:
items = ['abc', 'def']
select_rows(*items)
Run Code Online (Sandbox Code Playgroud)
And*_*are 12
我会这样做:
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)
Run Code Online (Sandbox Code Playgroud)
并期望参数将始终是一个列表 - 即使它只是一个元素的列表.
记得:
要求宽恕比获得更容易.