Python: snippet de padrão de destruição de contêiner

Um dos padrões de programação funcional que gosto e uso mais é a desestruturação do contêiner de sequência: quando você usa correspondência de padrões, por exemplo. (Haskell usa o açúcar sintático [x: xs]).

Destruição é apenas um nome chique para fatiar uma lista.

Na maioria das vezes, você o usa para ocupar o primeiro lugar na sua lista, e o resto aparece. E descobri que faltava no python (corrija-me se estiver errado) quando estava tentando fazer essas coisas:

commands = ([signal, key, value], ...)
for command in commands:
signal
, args = **destructuring command**

Claro que eu poderia ter usado duas linhas como esta:

signal = command.pop(0)
args
= command

Mas parecia importante para mim poder fazê-lo em uma linha e sem alterar o contêiner original. Então, aqui está meu snippet de desestruturação:

from collections import Sequence

def destructurate(container):
class DestructurationError(Exception):
pass

if isinstance(container, Sequence):
return container[0], container[1:]
else:
raise DestructurationError("Can't destructurate a non-sequence container")

Que no meu caso você pode usar como:

>>> signal, args = destructurate(command)
>>> signal
signal

>>> args
[key, value]