Учитывая
import more_itertools as mit
iterable = ["A", "WORD", "B" , "C" , "WORD" , "D"]
pred = lambda x: x == "WORD"
Код
list(mit.split_before(iterable, pred))
# [['A'], ['WORD', 'B', 'C'], ['WORD', 'D']]
more_itertools
является сторонней библиотекой устанавливается через > pip install more_itertools
.
См. Также split_at
и split_after
.
Особенность современных процессоров ARM (и некоторых других).
Из патента:
Метод выполнения быстрого прерывание в процессоре цифровых данных иметь возможность обрабатывать больше предусмотрено более одного прерывания. Когда запрос быстрого прерывания получен установлен флаг и счетчик программы и регистры кода состояния хранится в стеке. В конце прерывание процедуры обслуживания возврат из инструкций прерывания извлекает регистр кода состояния, который содержит статус цифрового обработчик данных и проверяет, чтобы увидеть установлен флаг или нет. Если флаг установлен, это означает, что быстрое прерывание было обслужено и поэтому только счетчик программ unstacked.
Другими словами, FIQ - это просто запрос прерывания с более высоким приоритетом, который получает приоритет путем отключения IRQ и других обработчиков FIQ во время обслуживания запроса. Следовательно, никакие другие прерывания не могут возникать во время обработки активного прерывания FIQ.
FIQ имеет более высокий приоритет и может быть введен во время обработки другого IRQ. Наиболее важные ресурсы обрабатываются FIQ, остальные обрабатываются IRQ.
Это может быть неправильно. Все, что я знаю, это то, что FIQ означает быстрый запрос прерывания, а IRQ - запрос прерывания. Судя по этим названиям, я предполагаю, что FIQ будет обработан (брошен?) Быстрее, чем IRQ. Вероятно, это как-то связано с конструкцией процессора, где FIQ прерывает процесс быстрее, чем IRQ. Прошу прощения, если я ошибаюсь, но обычно я занимаюсь программированием более высокого уровня, сейчас я просто предполагаю.
Я считаю, что это то, что вы ищете:
http://newsgroups.derkeiler.com/Archive/Comp/comp.sys.arm/2005-09/msg00084.html
По сути, FIQ будет иметь наивысший приоритет с несколькими источниками IRQ с более низким приоритетом.
Хаос уже дал хороший ответ, но еще не рассмотренный дополнительный момент заключается в том, что FIQ находится в конце векторной таблицы, и поэтому обычно / традиционно просто запускают процедуру прямо здесь, тогда как вектор IRQ обычно является именно таким. (т.е. прыжок в другое место). Избегание этой дополнительной ветки сразу после полного тайника и переключения контекста - небольшое увеличение скорости.
другая причина в том, что в случае FIQ требуется меньшее количество регистров для вставки в стек, режим FIQ имеет регистры от R8 до R14_fiq