Проверка типа: итеративный тип, который не является строкой
Чтобы объяснить лучше, рассмотрим эту простую функцию проверки типа:
from collections import Iterable
def typecheck(obj):
return not isinstance(obj, str) and isinstance(obj, Iterable)
Еслиobj
итеративный тип, отличный отstr
, это возвращаетTrue
, Однако еслиobj
этоstr
или не повторяемый тип, он возвращаетFalse
.
Есть ли способ выполнить проверку типа более эффективно? Я имею в виду, это кажется излишним, чтобы проверить типobj
один раз, чтобы увидеть, если это неstr
а потом проверьочередной раз чтобы увидеть, является ли это итеративным.
Я думал о перечислении всех других повторяемых типов, кромеstr
нравится:
return isinstance(obj, (list, tuple, dict,...))
Но проблема в том, что этот подход будет пропускать любые другие итерируемые типы, которые явно не перечислены.
Итак ... есть ли что-нибудь лучше или подход, который я дал в функции, наиболее эффективен?