2

我正在尝试存储命令列表以在 Python 中使用 deque 发送串行电缆。

我的函数“send_command”接受 3 个值;命令,一个整数。暂停和布尔等待。其定义如下。

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

我想做的是,而不是像这样调用这个函数:

send_command("A234", 5, True)

... 或者...

send_command("B4242")

我希望能够将命令存储在双端队列列表中,然后使用 popleft 函数调用我的函数。这将允许我执行以下操作:

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

...并使用 deque.append() 作为继续向列表中添加内容的一种方式,然后将其发送到我的 send_command 函数。然后,我可以在需要时(或尽可能快地在我的代码的串行部分执行的操作)中加入和退出列表中的新命令。

我正在努力解决的部分实际上是使用CommandList.popleft 或 deque 列表的任何部分作为我的 send_command 函数的参数。它似乎并不像:

send_command(CommandList.popleft)

我确定这很简单,但我无法弄清楚。

任何人都可以帮忙吗?

非常感谢你。

安迪

4

3 回答 3

3

可能你需要类似的东西:

obj.send_command(*CommandList.popleft())

也就是说,调用 popleft 并将结果用作 send_command 的参数列表。self参数表明这是一个成员函数,因此您需要在对象上调用它

正如我在评论中所写的那样,另一种方法是使用以下内容存储准备好的函数:

def make_command(obj, *args, **kwargs):
    def f():
        obj.send_command(*args, **kwargs)
    return f

然后你可以做

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

然后执行:

command = queue.popleft()
command()
于 2010-07-14T20:26:05.777 回答
1

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

高温高压

于 2010-07-14T20:40:08.097 回答
0

你有没有尝试过:

send_command(CommandList.popleft()) # note the ()
于 2010-07-14T20:24:15.513 回答