Skip to main content
 首页 » 编程设计

python之使用 Deque.popleft 作为函数的参数

2024年08月12日27jillzhang

我正在尝试存储一个命令列表,以在 Python 中使用双端队列发送串行电缆。

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

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 或双端队列列表的任何部分作为我的send_command 函数的参数。它似乎并不像以下那样简单:

send_command(CommandList.popleft) 

我确定这很简单,但我无法弄明白。

有人能帮忙吗?

谢谢你。

安迪

请您参考如下方法:

可能你需要这样的东西:

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()