¿Cómo lo hago pitónicamente?
var = 7.0
var_is_good = isinstance(var, classinfo1) or isinstance(var, classinfo2) or isinstance(var, classinfo3) or ... or isinstance(var, classinfoN)
Parece una tontería no puedo simplemente pasar una lista de información de clase:
var_is_good = isinstanceofany( var, [classinfo1, classinfo2, ... , classinfoN] )
Entonces, ¿cuál es la isinstanceofany
función?
python
types
isinstance
D Adams
fuente
fuente
number
O devuelve una expresión sympy)). Quiero comprobar que la función que generé hace lo que se supone que debe hacer cuando la paso a otras funciones.Respuestas:
isinstance()
toma una tupla de clases para el segundo argumento. Devolverá verdadero si el primer argumento es una instancia de cualquiera de los tipos en esa secuencia:En otras palabras,
isinstance()
ya ofrece esta funcionalidad, lista para usar.De la
isinstance()
documentación :Énfasis mío; tenga en cuenta la naturaleza recursiva;
(classinfo1, (classinfo2, classinfo3))
también es una opción válida.fuente
Ya estabas bastante cerca del título de tu pregunta. Podrías usar
any
y una lista:var = 7.0 var_is_good = any([isinstance(var, classinfo1), isinstance(var, classinfo2), isinstance(var, classinfo3), ... isinstance(var, classinfoN)])
Pero mirando en los documentos de
isinstance
revela:Esto significa que la mejor manera de hacerlo es
var = 7.0 var_is_good = isinstance(var, (classinfo1, classinfo2, classinfo3, ..., classinfoN))
fuente
isinstance
con solo elclassinfo
cambio no me parece muy Pythonic.var.__class__
. ¿Es eso lo que quieres? @Makoto: Estoy de acuerdo. ¡No es Pythonic en absoluto!any()
con una lista es ... inútil. Use una expresión generadora si debe usarany()
, entonces al menos obtendrá el beneficio de la salida anticipada.isinstance
tupla with es el camino a seguir. Solo quería mencionar la solución,any
ya que parecía ser lo que estaba pidiendo en el título.Esto resolverá tu problema:
Según la documentación, hay muchas formas de pasar valores de tipos
isinstance
.También puede parecer voluptuoso si está tratando de hacer una validación más complicada de la cual esto es solo una parte.
fuente
Por lo general, no debería usarlo
isinstance
, pero lo que desea hacer se puede lograr con la función incorporada any () .var_is_good = any(isinstance(var, t) for t in [type1, type2, type3])
fuente
isinstance()
ofrece la funcionalidad lista para usar sin usarany()
.isinstance()
es irrelevante.isinstance()
. Gracias.