Проверка типа: итеративный тип, который не является строкой
Чтобы объяснить лучше, рассмотрим эту простую функцию проверки типа:
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,...))
Но проблема в том, что этот подход будет пропускать любые другие итерируемые типы, которые явно не перечислены.
Итак ... есть ли что-нибудь лучше или подход, который я дал в функции, наиболее эффективен?