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