Verificação de tipo: um tipo iterável que não é uma string

Para explicar melhor, considere esta função de verificador de tipo simples:

from collections import Iterable
def typecheck(obj):
    return not isinstance(obj, str) and isinstance(obj, Iterable)

E seobj é um tipo iterável diferentestr, retornaTrue. No entanto, seobj é umstr ou um tipo não iterável, retornaFalse.

Existe alguma maneira de realizar a verificação de tipo de forma mais eficiente? Quero dizer, parece meio redundante verificar o tipo deobj uma vez para ver se não é umstr e então verifiquenovamente para ver se é iterável.

Eu pensei em listar todos os outros tipos iteráveis ​​alémstr como isso:

return isinstance(obj, (list, tuple, dict,...))

Mas o problema é que essa abordagem perderá todos os outros tipos iteráveis ​​que não estejam explicitamente listados.

Então ... existe alguma coisa melhor ou a abordagem que eu dei na função é a mais eficiente?

questionAnswers(2)

yourAnswerToTheQuestion