Bienvenidos sean a este post, en el post anterior hablamos sobre los tipos de datos numericos pero hoy nos centraremos en tres tipos distintos.
Strings
Como todos los lenguajes modernos lo referido a texto lo manejamos por medio de objetos str, mas comunmente conocidos como strings o cadenas, estas se consideran inmutables porque son puntos de codigo de Unicode y si bien pueden representar un caracter tambien nos brindan otras posibilidades como formatear un texto por ejemplo, aunque python no puede manejar objetos de tipo char si puede manejar cadenas con una longitud de un caracter haciendo una equivalencia, en algunos posts anteriores estuvimos manejando cadenas de texto y utilizamos la comilla simple pero tenemos mas tipos que nos permiten mas opciones:
- Comilla simple (‘)
- Comilla doble («)
- Comilla triple (»’)
Las dos primeras comillas son de los usos normales en cualquier lenguaje pero la triple nos da una posibilidad interesante, para ver como funcionan veamos el siguiente ejemplo:
>>> cdn1 = 'Esta es una cadena de comilla simple'
>>> cdn2 = "Esta es otra cadena pero de comillas dobles"
>>> cdn3 = '''Esta es una cadena con comillas triples
... y nos permite tener multiples lineas'''
>>> cdn4 = """Este es una cadena con triple comillas dobles
... y nos permite tener multiples lineas
... tambien"""
>>>
Tenemos cuatro nombres de tipo cadena, si observan tenemos otra opcion que es la triple comilla doble que trabaja igual que la comilla triple, las triples comillas nos brindan la posibilidad de tener multiples lineas en un texto, recuerden siempre cerrar el texto con las mismas comillas que iniciaron, ahora vamos a probar de mostrarlo de la siguiente forma:
>>> cdn4
'Este es una cadena con triple comillas dobles\ny nos permite tener multiples lineas\ntambien'
>>> print(cdn4)
Este es una cadena con triple comillas dobles
y nos permite tener multiples lineas
tambien
>>>
Si lo mostramos de manera directa como hacemos siempre nos devolvera el texto sin formato y con las comillas simples, hayamos usado simples o dobles, pero si lo hacemos con la funcion print este la devolvera con el formato correspondiente, si observan la primera salida al no formatearla nos muestra el delimitador para nueva linea, \n, el cual print lo interpreta y crea la nueva linea, tambien disponemos de una funcion que nos permite saber el tamaño de nuestra cadena:
>>> len(cdn1)
36
>>>
La funcion es len y nos devolvera el total de caracteres que posee la cadena que poseen, incluyendo los espacios, con esto terminamos lo basico con las cadenas pasemos al siguiente tema.
Indexacion y corte
Cuando trabajamos con cadenas muchas veces necesitamos saber de una parte determinada de nuestra cadena (indexacion) o extraer una parte de la misma (corte), para trabajar con esto se utiliza la siguiente sintaxis:
nombre[inicio:final:paso]
En este caso inicio es la posicion del texto donde comenzara, final es la posicion del texto donde se detendra y paso sera la cantidad de caracteres que omitira, veamos como trabajan las distintas posibilidades utilizando una de las cadenas que vimos anteriormente:
>>> cdn1[0]
'E'
>>> cdn1[:4]
'Esta'
>>> cdn1[4:]
' es una cadena de comilla simple'
>>> cdn1[5:29]
'es una cadena de comilla'
>>> cdn1[5:29:3]
'eu daeol'
>>> cdn1[:]
'Esta es una cadena de comilla simple'
>>>
Si informamos un solo valor, el lenguaje interprete que solo necesitamos un caracter en la posicion informada, en la segunda accion comenzara desde el inicio (la posicion 0) hasta la quinta posicion (la cuatro porque inicia desde 0), la tercera accion le indicamos desde cual posicion iniciamos pero al no indicar un valor de final este seguira hasta el final de la cadena, en la cuarta accion establecimos un limite con una posicion de inicio y una posicion donde detenerse para extraer una porcion de la cadena, en la quinta accion le pasamos un paso y nos trae los caracteres cada tres pasos, por ultimo el informar solo los dos puntos nos hace una copia del texto de forma rapida.
Nota: Cuando no informemos uno de los tres valores tomara sus valores predeterminados, por ejemplo para paso 1.
Formateando cadenas
Cuando hablamos de formatear cadenas es la posibilidad de poder tener una cadena literal con la posibilidad de poder agregar ciertos textos para poder dar una mejor presentacion a los mismos, veamos el primer caso de la forma mas antigua de hacerlo:
>>> saludo = 'Hola %s!'
>>> saludo % 'Tinchicus'
'Hola Tinchicus!'
>>>
Este es el metodo mas simple y antiguo, primero definimos un literal donde agregaremos un modificador para indicarle que es una cadena (%s), despues pasamos el nombre con el modificador (%) y el texto que usaremos, finalmente nos mostrara el texto, veamos otra forma de formatearlo:
>>> saludo = 'Hola {} {}'
>>> saludo.format('El','Tinchicus')
'Hola El Tinchicus'
>>>
En este caso vamos a formatear en base a la posicion, si observan modificamos a saludo donde pusimos un texto con dos conjuntos de llaves, luego por medio de format le pasamos dos cadenas y este las ubicara en base al orden que las informamos, nuestro siguiente formato tambien es de posicion pero con indices:
>>> saludo = 'Este es {0}! {1} ama {0}'
>>> saludo.format('Python','Tinchicus')
'Este es Python! Tinchicus ama Python'
>>>
Este trabaja de forma similar al anterior pero la diferencia es que le indicamos en cada conjunto de llaves cual dato debe mostrar, este es mas util porque nos permite reutilizar los datos que pasamos, para finalizar con este tema tambien podemos formatear por claves:
>>> saludo = 'Hola, mi nombre es {nombre} {apellido}'
>>> saludo.format(nombre='Martin', apellido='Miranda')
'Hola, mi nombre es Martin Miranda'
>>>
Cuando hablamos por clave es relacionar el dato con una palabra clave, en el ejemplo tenemos a nombre y apellido, donde los informamos dentro del conjunto de llaves, despues por medio de format usamos la clave seguido del igual y el valor asociado, cuando lo ejecutemos lo vemos correctamente creado, con esto cubrimos como formatear cadenas pero tambien se pueden formatear literales, veamos un ejemplo:
>>> nombre = 'Tinchicus'
>>> edad = 44
>>> f'Hola, mi nombre es {nombre} y tengo {edad}'
'Hola, mi nombre es Tinchicus y tengo 44'
>>>
Primero definimos dos variables para almacenar el nombre y la edad respectivamente, luego antes del texto literal utilizamos la letra f para indicarle al lenguaje que se debe formatear y usamos conjunto de llaves donde indicaremos cual variable debemos usar ahi, cuando lo ejecutamos vemos como se agregaron los variables de nuestra variable, estos se pueden usar para cualquier valor como vemos en el ejemplo.
Bytes
Cuando comenzamos a hablar sobre cadenas dijimos que estas en realidad estaban hechas con puntos de codigo de Unicode para facilitarnos varias tareas pero esto en realidad convierte a la cadena en objetos de tipo Bytes, esto es debido a que la cadena se convierte en un codigo que el ordenador puede interpretarlo de mejor manera, esta forma de trabajar nos permite poder trabajar con paquetes de datos y poder enviar de manera mas sencilla informacion en la red de redes pero para ello debemos codificarlo y decodificarlo.
Para poder realizar estas tareas debemos usar dos funciones:
- encode, para codificar codigos de Unicode
- decode, para decodificar los objetos de tipo Bytes
Veamos un ejemplo para ponerlo en practica:
>>> s = "Este es un año extrañ0"
>>> type(s)
<class 'str'>
>>> encode_s = s.encode('utf-8')
>>> encode_s
b'Este es un a\xc3\xb1o extra\xc3\xb10'
>>> type(encode_s)
<class 'bytes'>
>>> encode_s.decode('utf-8')
'Este es un año extrañ0'
>>>
Primero creamos un nombre llamado s y le agregamos un texto con caracteres extraños, en este caso la ñ, por medio de la funcion type veremos cual es su clase, en este caso es de tipo str (string), luego creamos un nombre llamada encode_s y guardaremos el resultado de aplicar encode en el primer nombre, le diremos que use la version utf-8 de codificaciones, si lo mostramos veremos que nos indica por delante con una b para que sepamos que la cadena no es de tipo string sino de tipo bytes, si lo chequeamos veremos que es ese tipo (como se ve en el ejemplo) por ultimo si a este nombre le aplicamos el decode veremos que nos devolvera el valor original de nuestra variable, esto es mas util para cuando debemos enviar informacion por medio de la red, ya sea una intranet, internet, una pagina web, ftp o lo que sea, para que sea mejor interpretada por la misma, no se preocupen de esto hablaremos mas a fondo con mejores ejemplos mas adelante, pasemos al ultimo tema.
Tuples
Los tuples por defincion son:
Una secuencia de objetos arbitrarios de Python
El Tinchicus
Es decir que son un conjunto de objetos separados por comas que son usado en Python para trabajar con patrones que son dificiles de reproducir en otros lenguajes, por ejemplo nos permite definir multiples variables en una sola linea o que un objeto devuelva mas de un valor, algo raro en la mayoria de los lenguajes, vamos a ver el primer ejemplo que es como iniciar un tuple:
t = ()
Esto inicia un tuple pero lo deja vacio sin contenido pero reserva el espacio en memoria para que podamos empezar a completarlo, si usan type veremos que es de este tipo:
>>> type(t)
<class 'tuple'>
>>>
Pero vamos a comenzar a trabajar con este, para ello vamos a crear un tuple de un solo elemento:
>>> t = (44, )
En este caso por ser un solo elemento siempre debe llevar la coma despues del primer elemento de lo contrario no lo tomara como un tuple y nos devolvera un error, ahora vamos a crear un tuple de tres elementos:
>>> t = (1, 3, 5)
Como pueden ver es muy sencillo simplemente agregamos los valores que necesitamos y los mismos son separados por comas, una herramienta que disponemos es la posibilidad de poder verificar si un valor existe dentro de un tuple y esto podemos hacerlo de la siguiente manera:
>>> 3 in t
True
>>> 4 in t
False
>>>
Esto se hace por medio del operador in donde primero pasamos el valor a buscar seguido de in y por ultimo el tuple donde queremos buscar, si lo encuentra nos devolvera un True de lo contrario sera un False, como se ve en el ejemplo, vamos a ver uno de los ejemplos que dijimos al comienzo:
Nota: El operador in tambien permite buscar otros tipos de datos como strings.
>>> a,b,c = 1,2,3
>>> a,b,c
(1, 2, 3)
>>> a
1
>>>
Esta forma de trabajar es similar a como lo hace Lua, donde asignara en base al orden informado los valores a los nombres informados pero a diferencia de Lua si nosotros pasamos tres nombres debemos pasar tres valores sino devolvera un error, Lua omite las asignaciones si faltan valores, si ven cuando llamamos a los tres nombres nos devuelve los tres valores, por ultimo si llamamos a una de los nombres nos devuelve el valor asignado a el, una practicidad que nos trae este lenguaje es facilitarnos ciertas tareas, por ejemplo si nosotros en cualquier lenguaje necesitamos intercambiar los valores de dos nombres, habitualmente debemos recurrir a un nombre o variable temporal para poder intercambiarlos pero aqui podemos hacer esto:
>>> a, b = 0,1
>>> a,b
(0, 1)
>>> a,b = b,a
>>> a,b
(1, 0)
>>>
Primero creamos dos nombres donde asignamos sus valores, si lo chequeamos veremos que se asignaron correctamente, luego utilizamos a los nombres del principio pero despues del igual le pasamos los valores de las variables pero de forma invertida y ahora si lo verificamos notaremos que se cambiaron los valores de una manera muy simple, esto es la practicidad que nos brindan los tuples.
En resumen, hoy hemos visto los distintos tipos de secuencias inmutables, como son las cadenas (strings), los bytes y los tuples, hemos visto como podemos manejar a las cadenas, desde crearlas hasta darles formatos, viendo tambien como obtener una posicion o una porcion del mismo, hemos visto que son los objetos de tipo bytes, como codificarlos y decodificarlos y una explicacion en donde nos pueden ayudar y por ultimo hemos visto que son los tuples y como nos ayudan a la hora de manipular o asignar informacion en nuestras variables, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
