Вы использовали бы его, когда у вас есть пул рабочих мест для обработки в определенном порядке. Работа должна быть выполнена только один раз, но когда выполняются может быть добавлен еще раз:
jobs = set([job1, job2, job3])
while jobs:
job = jobs.pop()
job.process()
где job.process()
потенциально добавляет больше рабочих мест в кучу. После того как все задания будут обработаны, набор будет пустым и цикл будет выполнен.
Или, менее надуманный, в реальном мире, например, увидеть DependencyFinder.find()
method из distlib
библиотеки (используется pip
, например), который использует todo
набор для отслеживания поставщиков распределения, которые все еще нуждаются в обработке.
Метод является зеркалом dict.popitem()
method, который явно упоминает набор алгоритмов:
popitem()
полезно с разрушением итерации по словарю, как это часто используется в наборе алгоритмов.
Перед set
был добавлен к языку, вы бы использовать словарь с None
значений для эмуляции набора.
Это зеркало ['dict.pop()'] (http://docs.python.org/2/library/stdtypes.html#dict.pop) и ['dict.popitem()'] (http://docs.python.org/2/library/stdtypes.html#dict.popitem). Он используется в ситуациях, когда вам нужно «следующее» значение для обработки, но порядок не требуется. –