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