将多个项目放入 python 队列
Put multiple items in a python queue
假设您有一个可迭代对象 items
,其中包含应放入队列 q
的项目。
当然你也可以这样做:
for i in items:
q.put(i)
但是感觉没必要写成两行-那应该是pythonic吗?
有没有办法做一些更具可读性的事情——比如像这样
q.put(*items)
使用内置的map
函数:
map(q.put, items)
它将 q.put
应用到您列表中的所有项目。有用的一行。
对于Python3,您可以按如下方式使用:
list(map(q.put, items))
或者:
from collections import deque
deque(map(q.put, items))
但在这一点上,for
循环更具可读性。
这有什么不可读的?
for i in items:
q.put(i)
可读性与"short"不一样,一行不一定更可读;很多时候恰恰相反。
如果你想要一个 q.put(*items)
-like API,考虑制作一个简短的辅助函数,或者子类化 Queue
.
q.extend(items)
要简单Pythonic就够了
如果你想排在队列的前面
q.extendleft(items)
Python 文档:
https://docs.python.org/2/library/collections.html#collections.deque.extend
假设您有一个可迭代对象 items
,其中包含应放入队列 q
的项目。
当然你也可以这样做:
for i in items:
q.put(i)
但是感觉没必要写成两行-那应该是pythonic吗? 有没有办法做一些更具可读性的事情——比如像这样
q.put(*items)
使用内置的map
函数:
map(q.put, items)
它将 q.put
应用到您列表中的所有项目。有用的一行。
对于Python3,您可以按如下方式使用:
list(map(q.put, items))
或者:
from collections import deque
deque(map(q.put, items))
但在这一点上,for
循环更具可读性。
这有什么不可读的?
for i in items:
q.put(i)
可读性与"short"不一样,一行不一定更可读;很多时候恰恰相反。
如果你想要一个 q.put(*items)
-like API,考虑制作一个简短的辅助函数,或者子类化 Queue
.
q.extend(items)
要简单Pythonic就够了
如果你想排在队列的前面
q.extendleft(items)
Python 文档:
https://docs.python.org/2/library/collections.html#collections.deque.extend