関数は、行名(この場合は列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」リストが長い可能性がある場合に実行することを検討する可能性のあるもう1つのことを指摘しています。キャストを検討してください。ルックアップがより効率的になるように、それをセットにしてください。
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)
引数が常に1つの要素のリストであっても、リストであることを期待します。
覚えておいてください:
許可より許しを求める方が簡単です。
私はSharkeyのバージョンを使いますが、もう少しダックタイピングを使用します。
def select_rows(to_select):
try:
len(to_select)
except TypeError:
to_select = [to_select]
for row in range(0, table.numRows()):
if _table.item(row, 1).text() in to_select:
table.selectRow(row)
これには、in演算子をサポートするオブジェクトを操作できるという利点があります。また、以前のバージョンでは、タプルまたはその他のシーケンスが指定されている場合、それをリストにラップするだけでした。欠点は、例外処理を使用するとパフォーマンスが低下することです。
リストまたは単一オブジェクトのケースを処理するための単純なラッパー
def wrap_list(val):
if type(val) is list:
return val
return [val]