Если у вас есть несколько определений функций в одном октавном файле, вы используете autoload()
. Итак, если у вас есть foo.oct
с функциями foo
и bar
, то вы делаете:
autoload ("bar", "path-to-foo.oct");
На самом деле я согласен с ответом Эндрю Хейра , просто передайте список с одним элементом.
Но если вы действительно должны принять не-список, как насчет того, чтобы просто превратить его в список в таком случае?
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 wrap_list(val):
if type(val) is list:
return val
return [val]
Я бы сделал именно это:
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)
и ожидал, что аргумент всегда будет списком - даже если это всего лишь список из одного элемента.
Помните:
] Проще просить прощения, чем разрешения.
Вы можете переопределить свою функцию, чтобы она принимала любое количество аргументов, например:
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):
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. Кроме того, предыдущая версия, если бы ей был задан кортеж или какая-либо другая последовательность, просто заключила бы его в список. Обратной стороной является некоторое снижение производительности при использовании обработки исключений.