Sprawdzanie typu: typ iterowalny, który nie jest łańcuchem
Aby lepiej wyjaśnić, rozważ tę prostą funkcję sprawdzania typu:
from collections import Iterable
def typecheck(obj):
return not isinstance(obj, str) and isinstance(obj, Iterable)
Jeśliobj
jest typem powtarzalnym innym niżstr
, wracaTrue
. Jeśli jednakobj
jeststr
lub nie nadający się do powtórzenia typ, wracaFalse
.
Czy jest jakiś sposób na sprawniejsze sprawdzenie typu? To znaczy, wydaje się zbędne, aby sprawdzić typobj
raz, aby sprawdzić, czy nie jeststr
a następnie sprawdź tojeszcze raz aby sprawdzić, czy jest to możliwe.
Pomyślałem o wpisaniu wszystkich innych powtarzalnych typówstr
lubię to:
return isinstance(obj, (list, tuple, dict,...))
Problem polega jednak na tym, że w tym podejściu nie będzie żadnych innych typów iterowalnych, które nie są wyraźnie wymienione.
Więc ... czy jest coś lepszego, czy podejście, które podałem w funkcji, jest najbardziej efektywne?