tuplas - listas en python
Compruebe si la entrada es una lista/tupla de cadenas o una sola cadena (8)
Tengo un método que me permite aceptar una sola cadena (una ruta, pero no necesariamente una que exista en la máquina que ejecuta el código) o una lista / tupla de cadenas.
Dado que las cadenas actúan como listas de caracteres, ¿cómo puedo saber qué tipo ha recibido el método?
Me gustaría poder aceptar cadenas estándar o unicode para una sola entrada, y listas o tuplas para múltiples, por lo que la instancia no parece ser la respuesta a menos que me esté perdiendo un truco ingenioso (como tomar ventaja de las clases antecesoras comunes?).
La versión de Python es 2.5
¿Has considerado la sintaxis varargs
? No estoy seguro de si esto es lo que estás preguntando, pero ¿algo así como esta pregunta estaría en tus líneas?
Como me gusta mantener las cosas simples, esta es la forma más corta que es compatible con 2.x y 3.x:
# trick for py2/3 compatibility
if ''basestring'' not in globals():
basestring = str
v = "xx"
if isinstance(v, basestring):
print("is string")
No puedes hacer:
(i == list (i) or i == tuple (i))
Respondería si la entrada es tupla o lista. El único problema es que no funciona correctamente con una tupla que contiene solo una variable.
Puede verificar si una variable es una cadena o cadena unicode con
isinstance(some_object, basestring)
Esto devolverá True
para ambas cadenas y cadenas Unicode
Editar:
Podrías hacer algo como esto:
if isinstance(some_object, basestring):
...
elif all(isinstance(item, basestring) for item in some_object): # check iterable for stringness of all items. Will raise TypeError if some_object is not iterable
...
else:
raise TypeError # or something along that line
Stringness probablemente no sea una palabra, pero espero que entiendas la idea
Verificación de tipo:
def func(arg):
if not isinstance(arg, (list, tuple)):
arg = [arg]
# process
func(''abc'')
func([''abc'', ''123''])
Varargs:
def func(*arg):
# process
func(''abc'')
func(''abc'', ''123'')
func(*[''abc'', ''123''])
Verifique el tipo con isinstance (arg, basetring)
isinstance
es una opción:
In [2]: isinstance("a", str)
Out[2]: True
In [3]: isinstance([], str)
Out[3]: False
In [4]: isinstance([], list)
Out[4]: True
In [5]: isinstance("", list)
Out[5]: False
>>> type(''abc'') is str
True
>>> type([''abc'']) is str
False
Este código es compatible con Python 2 y 3