Использование Deque.popleft в качестве аргументов для функции - PullRequest
2 голосов
/ 15 июля 2010

Я пытаюсь сохранить список команд для отправки последовательного кабеля, используя deque в Python.

Моя функция "send_command" принимает 3 значения;Команда, инт.пауза и логическое ожидание.его определение таково:

def send_command(self, command, pause=0, wait=False):

Я хотел бы сделать вместо вызова этой функции, например:

send_command("A234", 5, True)

... или...

send_command("B4242")

Я хотел бы иметь возможность хранить команды в списке deque и использовать функцию popleft для последующего вызова моей функции.Это позволило бы мне делать такие вещи, как:

CommandList = deque((['A234', 5, True], ['B4242']))

... и использовать deque.append () как способ продолжать добавлять вещи в список, который затем был бы отправлен на мойфункция send_command.Затем я мог бы добавлять и выводить из списка новые команды, когда они необходимы (или так быстро, как это может сделать последовательная часть моего кода).

Часть, с которой я борюсь, на самом деле использует CommandList.popleft или любая часть списка deque в качестве аргументов для моей функции send_command.Это не так просто, как:

send_command(CommandList.popleft)

Я уверен, что это что-то простое, но я не могу понять это.

Кто-нибудь может помочь?

Спасибо, любезно.

Энди

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

вероятно, вам нужно что-то вроде:

obj.send_command(*CommandList.popleft())

То есть вызовите popleft и используйте результат в качестве списка аргументов для send_command.Аргумент self предполагает, что это функция-член, поэтому вам нужно вызывать ее для объекта

Другой способ, как я писал в комментарии, - хранить подготовленные функции примерно так:1008 *

Затем вы можете сделать

queue.append(make_command(obj, 'ABC', whatever='else'))

и затем выполнить:

command = queue.popleft()
command()
1 голос
/ 15 июля 2010

unbeli правильно: вам нужно () для вызова функции и * для распаковки аргументов.Однако нет необходимости использовать deque, когда вы можете просто сделать это:

commandlist = [['A234', 5, True], ['B4242'], ['A234', 0]]

for command in commandlist:
   send_command(*command)

, и это будет прекрасно работать.Для получения дополнительной информации см. распаковка списков аргументов .

Очереди действительно необходимы, только если вы делаете что-то, для чего вы хотите использовать значения - например, вы хотите, чтобы ваш список команд был пуствсе готовоКонечно, вы можете сделать то же самое со списком:

q = [1,2,3,4]
while q:
   print q.pop(0)
print q

HTH

0 голосов
/ 15 июля 2010

Вы пробовали:

send_command(CommandList.popleft()) # note the ()
...