Comprobación de tipo: un tipo iterable que no es una cadena

Para explicar mejor, considere esta simple función de comprobación de tipos:

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

Siobj es un tipo iterable distinto destr, vuelveTrue. Sin embargo, siobj es unstr o un tipo no iterable, devuelveFalse.

¿Hay alguna manera de realizar la comprobación de tipo de manera más eficiente? Quiero decir, parece un poco redundante para comprobar el tipo deobj Una vez para ver si no es unstr y luego revisalootra vez Para ver si es iterable.

Pensé en enumerar todos los demás tipos iterables ademásstr Me gusta esto:

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

Pero el problema es que ese enfoque omitirá cualquier otro tipo iterable que no esté explícitamente en la lista.

Entonces ... ¿hay algo mejor o el enfoque que di en la función es el más eficiente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta