Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在队列中放置和获取一组多个项目?_Python_Variables_Task Queue - Fatal编程技术网

Python 如何在队列中放置和获取一组多个项目?

Python 如何在队列中放置和获取一组多个项目?,python,variables,task-queue,Python,Variables,Task Queue,工人: 将项目放入队列: def worker(): while True: fruit, colour = q.get() print 'A ' + fruit + ' is ' + colour q.task_done() 输出: fruit = 'banana' colour = 'yellow' q.put(fruit, colour) 我怎样才能做到这一点?我尝试了一下,得到了ValueError:太多的值,无法解包,直到那时

工人:

将项目放入队列:

def worker():
    while True:
        fruit, colour = q.get()
        print 'A ' + fruit + ' is ' + colour
        q.task_done()
输出:

fruit = 'banana'
colour = 'yellow'
q.put(fruit, colour)
我怎样才能做到这一点?我尝试了一下,得到了
ValueError:太多的值,无法解包
,直到那时我才意识到我的
q.put()
将这两个变量都放入了队列中

有没有办法像我尝试的那样,将一组变量/对象放入一个队列项目中?

是的,使用元组:

>>> A banana is yellow

它应该被自动解包(应该,因为我不能在atm机上试用)。

所以,我认为最好的方法是重构一下数据。制作某种对象来保存一对值(在本例中为水果和颜色),然后将该对象放入队列,然后在需要时取出变量


如果您愿意,我可以稍后发布一些示例代码。

我只想列出:

fruit = 'banana'
colour = 'yellow'
q.put((fruit, colour))
然后像这样得到它:

fruit = 'banana'
colour = 'yellow'
q.put([fruit, colour])

Python还通过类的帮助提供数据抽象

因此,另一种方法是在类的帮助下放置对象(将相关信息抽象在一起),如下所示

result = q.get()
fruit = result[0]
colour = result[1]

是的,这本质上就是@dav1d的答案所做的,使用元组作为值保持对象
class Fruit(object):
   def __init__(self, name, color):
       self.name = name
       self.color = color

q.put(Fruit('banana', 'yellow'))

def worker():
    while True:
        fruit  = q.get()
        print 'A ' + fruit.name + ' is ' + fruit.color
        q.task_done()