微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何“运行”队列中的函数?

如何解决如何“运行”队列中的函数?

基本上我在 Python 中创建了一个带有一些函数的队列(用户按照他想要的顺序排列),现在我想按顺序执行这些函数,但我真的没有找到哪个顺序这样做。 队列:

class Queue:
    def __init__(self):
        self.elements = []
        
    def enqueue(self,data):
        self.elements.append(data)
        return data
    
    def dequeue(self):
        return self.elements.pop(0)
    
    def rear(self): 
        return self.elements[-1]

    def front(self):
        return self.elements[0]

    def is_empty(self):
        return len(self.elements) == 0

功能

if (escolha=='2'):
        print("Type your hotkey. Ex: alt+tab+ [3 keys maximum]")
        my_var = input("")
        my_var = my_var.split('+')
        def hotchave():
            pyautogui.hotkey(str(my_var[0]),str(my_var[1]),str(my_var[2]))
        queue.enqueue(hotchave)
        
if (escolha=='3'):
        write=input('What will be written?: ')
        def escrever():
            pyautogui.write(write)
        queue.enqueue(escrever)

我已经尝试过诸如 return、front 之类的东西,但似乎没有用。

解决方法

有几种不同的方法可以做你想做的事,其中一些需要修改你的类。既然你说你想从队列中检索和运行多个函数,我建议可以迭代它的当前内容,这可以通过向类添加一个 __iter__() 方法来完成。

下面展示了如何做到这一点,以及如何使用它。

class Queue:
    def __init__(self):
        self.elements = []

    def enqueue(self,data):
        self.elements.append(data)
        return data

    def dequeue(self):
        return self.elements.pop(0)

    def rear(self):
        return self.elements[-1]

    def front(self):
        return self.elements[0]

    def is_empty(self):
        return len(self.elements) == 0

    def __iter__(self):
        '''Iterate current contents.'''
        return (elem for elem in self.elements)

示例用法:

queue = Queue()

my_var = 'alt+shift+k'
my_var = my_var.split('+')
def hotchave():
    print('vars:',str(my_var[0]),str(my_var[1]),str(my_var[2]))
queue.enqueue(hotchave)

write = 'This will be written'
def escrever():
    print(write)
queue.enqueue(escrever)

# Execute commands in Queue.
for command in queue:
    command()
print('-fini-')

输出:

vars: alt shift k
This will be written
-fini-

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。