Introducci贸n a Python
1. Resumen
Vamos a hacer una breve introducci贸n a Python, explicando los tipos de datos que tenemos, los operadores, el uso de funciones y de clases. Adem谩s, veremos c贸mo usar los objetos iterables, c贸mo usar m贸dulos, etc.
2. Tipos de datos de Python
Existen 7 tipos de datos en Python
- De tipo texto:
str
- Num茅ricos:
int
,float
,complex
- Secuencias:
list
,tuple
,range
- Mapping:
dict
- Sets:
set
,frozenset
- Booleanos:
bool
- Binarios:
bytes
,bytearray
,memoryview
Podemos obtener el tipo de dato mediante la funci贸n type()
type(5.)
float
Python es un lenguaje de tipado din谩mico, es decir, puedes tener una variable de un tipo y luego asignarle otro tipo
a = 5type(a)
int
a = 'MaximoFN'type(a)
str
Python tipa las variables por ti, pero si las quieres tipear t煤 se puede hacer
b = int(5.1)type(b), b
(int, 5)
Aunque b
se ha inicializado como 5.1
, es decir, deber铆a ser de tipo float
, al tiparlo nosotros a tipo int
, vemos que es de tipo int
y adem谩s su valor es 5
2.1. Strings
Los strings
son cadenas de caracteres, estas se pueden definir con doble comilla "
o comilla simple '
string = "MaximoFN"string
'MaximoFN'
string = 'MaximoFN'string
'MaximoFN'
Para escribir un string
muy largo y no tener una fila que ocupe mucho espacio, se puede introducir en varias l铆neas
string = """Este es un ejemplo decomo estoy introduciendo un stringen varias lineas"""string
'Este es un ejemplo de como estoy introduciendo un string en varias lineas'
string = '''Este es un ejemplo decomo estoy introduciendo un stringen varias lineas'''string
'Este es un ejemplo de como estoy introduciendo un string en varias lineas'
Sin embargo, vemos que en medio ha metido el car谩cter , este car谩cter indica el salto de l铆nea. Si usamos la funci贸n
print()
veremos c贸mo ya no aparece
print(string)
Este es un ejemplo decomo estoy introduciendo un stringen varias lineas
Como hemos dicho, los strings son cadenas de caracteres, por lo que podemos navegar e iterar a trav茅s de ellos
for i in range(10):# Se indica a la funci贸n print que cuando imprima no termine con un salto de# linea para escribir todo en la misma lineaprint(string[i], end='')
Este es un
Podemos obtener la longitud de nuestro string mediante la funci贸n len()
len(string)
73
Chequear si hay alg煤n string determinado dentro del nuestro
'ejemplo' in string
True
Los strings tienen ciertos atributos 煤tiles, como poner todo en may煤sculas
print(string.upper())
ESTE ES UN EJEMPLO DECOMO ESTOY INTRODUCIENDO UN STRINGEN VARIAS LINEAS
Todo en min煤sculas
print(string.lower())
este es un ejemplo decomo estoy introduciendo un stringen varias lineas
Reemplazar caracteres
print(string.replace('o', '@'))
Este es un ejempl@ dec@m@ est@y intr@duciend@ un stringen varias lineas
Obtener todas las palabras
print(string.split())
['Este', 'es', 'un', 'ejemplo', 'de', 'como', 'estoy', 'introduciendo', 'un', 'string', 'en', 'varias', 'lineas']
Puedes ver todos los m茅todos de los strings en este enlace
Otra cosa 煤til que se puede hacer con los strings es concatenarlos
string1 = 'Maximo'string2 = 'FN'string1 + string2
'MaximoFN'
Antes explicamos que el car谩cter \n
correspond铆a a un salto de l铆nea, este car谩cter especial corresponde a una serie de caracteres especiales llamados Escape Characters
. Veamos otros
Si declaramos un string con doble comilla y queremos a帽adir una doble comilla dentro del string usamos el escape character \"
print("Este es el blog de \"MaximoFN\"")
Este es el blog de "MaximoFN"
Lo mismo con la comilla simple, a帽adimos \'
print('Este es el blog de \'MaximoFN\'')
Este es el blog de 'MaximoFN'
Ahora tenemos el problema de si queremos a帽adir el car谩cter \ ya que como hemos visto es un escape character
, as铆 que lo solucionamos poniendo doble barra (backslash) \
print('Este es el blog de \\MaximoFN\\')
Este es el blog de \MaximoFN\
Ya vimos antes el escape character
de nueva l铆nea \n
print('Este es el blog de \nMaximoFN')
Este es el blog deMaximoFN
Si queremos escribir desde el inicio de l铆nea a帽adimos \r
print('Esto no se imprimir谩 \rEste es el blog de MaximoFN')
Este es el blog de MaximoFN
Si queremos a帽adir un espacio grande (sangr铆a) usamos \t
print('Este es el blog de \tMaximoFN')
Este es el blog de MaximoFN
Podemos borrar un car谩cter con \b
print('Este es el blog de \bMaximoFN')
Este es el blog deMaximoFN
Podemos a帽adir el c贸digo ASCII en octal mediante \ooo
print('\115\141\170\151\155\157\106\116')
MaximoFN
O a帽adir el c贸digo ASCII en hexadecimal mediante \xhh
print('\x4d\x61\x78\x69\x6d\x6f\x46\x4e')
MaximoFN
Por 煤ltimo, podemos convertir otro tipo de dato en un string
n = 5print(type (n))string = str(n)print(type(string))
<class 'int'><class 'str'>
2.2. N煤meros
2.2.1. Enteros
N煤meros de tipo entero
n = 5n, type(n)
(5, int)
2.2.2. Float
N煤meros de tipo coma flotante
n = 5.1n, type(n)
(5.1, float)
2.2.3. Complejos
N煤meros complejos
n = 3 + 5jn, type(n)
((3+5j), complex)
2.2.4. Conversi贸n
Se puede convertir entre tipos de n煤meros
n = 5n = float(n)n, type(n)
(5.0, float)
n = 5.1n = complex(n)n, type(n)
((5.1+0j), complex)
n = 5.1n = int(n)n, type(n)
(5, int)
No se puede convertir un n煤mero complex
a tipo int
o tipo float
2.3. Secuencias
2.3.1. Listas
Las listas guardan m煤ltiples 铆tems en una variable. Se declaran mediante los s铆mbolos []
, con los 铆tems separados por comas
lista = ['item0', 'item1', 'item2', 'item3', 'item4', 'item5']lista
['item0', 'item1', 'item2', 'item3', 'item4', 'item5']
Podemos obtener la longitud de una lista mediante la funci贸n len()
len(lista)
6
Las listas pueden tener 铆tems de distintos tipos
lista = ['item0', 1, True, 5.3, "item4", 5, 6.6]lista
['item0', 1, True, 5.3, 'item4', 5, 6.6]
En Python se empieza a contar desde la posici贸n 0, es decir, si queremos obtener el primer elemento de la lista
lista[0]
'item0'
Pero una de las cosas potentes de Python es que si queremos acceder a la 煤ltima posici贸n podemos usar 铆ndices negativos
lista[-1]
6.6
Si en vez de la 煤ltima posici贸n de la lista queremos la pen煤ltima
lista[-2]
5
Si solo queremos un rango de valores, por ejemplo, del segundo al quinto 铆tem accedemos mediante [2:5]
lista[2:5]
[True, 5.3, 'item4']
Si se omite el primer n煤mero del rango significa que queremos desde el primer 铆tem de la lista hasta el 铆tem indicado, es decir, si queremos desde el primer 铆tem hasta el quinto usamos [:5]
lista[:5]
['item0', 1, True, 5.3, 'item4']
Si se omite el 煤ltimo n煤mero del rango, significa que queremos desde el 铆tem indicado hasta el 煤ltimo. Es decir, si queremos desde el tercer 铆tem hasta el 煤ltimo, usamos [3:]
lista[3:]
[5.3, 'item4', 5, 6.6]
Podemos escoger el rango de 铆tems tambi茅n con n煤meros negativos, es decir, si queremos desde el antepen煤ltimo hasta el pen煤ltimo usamos [-3:-1]
. Esto es 煤til cuando se tiene listas que no se sabe su longitud, pero se sabe que se quiere un rango de valores del final, porque por ejemplo, la lista se ha creado con medidas que se van tomando y se quiere saber las 煤ltimas medias
lista[-3:-1]
['item4', 5]
Se puede comprobar si un 铆tem est谩 en la lista
'item4' in lista
True
2.3.1.1. Editar listas
Las listas en Python son din谩micas, es decir, se pueden modificar. Por ejemplo se puede modificar el tercer 铆tem
lista[2] = Falselista
['item0', 1, False, 5.3, 'item4', 5, 6.6]
Tambi茅n se puede modificar un rango de valores
lista[1:4] = [1.1, True, 3]lista
['item0', 1.1, True, 3, 'item4', 5, 6.6]
Se pueden agregar valores al final de la lista mediante el m茅todo append()
lista.append('item7')lista
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item7']
O podemos insertar un valor en una posici贸n determinada mediante el m茅todo insert()
lista.insert(2, 'insert')lista
['item0', 1.1, 'insert', True, 3, 'item4', 5, 6.6, 'item7']
Se pueden unir listas mediante el m茅todo extend()
lista2 = ['item8', 'item9']lista.extend(lista2)lista
['item0', 1.1, 'insert', True, 3, 'item4', 5, 6.6, 'item7', 'item8', 'item9']
No es necesario extender la lista mediante otra lista, se puede hacer mediante otro tipo de dato iterable de Python (tuplas
, sets
, diccionarios
, etc)
tupla = ('item10', 'item11')lista.extend(tupla)lista
['item0',1.1,'insert',True,3,'item4',5,6.6,'item7','item8','item9','item10','item11']
Podemos eliminar una posici贸n determinada mediante el m茅todo pop()
lista.pop(2)lista
['item0',1.1,True,3,'item4',5,6.6,'item7','item8','item9','item10','item11']
Si no se especifica el 铆ndice, se elimina el 煤ltimo 铆tem
lista.pop()lista
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item7', 'item8', 'item9', 'item10']
O se puede eliminar un item sabiendo su valor mediante el m茅todo remove()
lista.remove('item7')lista
['item0', 1.1, True, 3, 'item4', 5, 6.6, 'item8', 'item9', 'item10']
Con la funci贸n del()
se puede eliminar tambi茅n un 铆tem de la posici贸n indicada
del lista[3]lista
['item0', 1.1, True, 'item4', 5, 6.6, 'item8', 'item9', 'item10']
Si no se indica el 铆ndice se elimina la lista completa
Con el m茅todo clear()
dejo la lista vac铆a
lista.clear()lista
[]
Se puede obtener la cantidad de 铆tems con un valor determinado mediante el m茅todo count()
lista = [5, 4, 6, 5, 7, 8, 5, 3, 1, 5]lista.count(5)
4
Tambi茅n se puede obtener el primer 铆ndice de un 铆tem con un valor determinado mediante el m茅todo index()
lista = [5, 4, 6, 5, 7, 8, 5, 3, 1, 5]lista.index(5)
0
2.3.1.2. List comprehension
Podemos operar a trav茅s de la lista
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]newlist = []# Iteramos por todos los items de la listafor x in fruits:# Si el item contiene el caracter "a" lo a帽adimos a newlistif "a" in x:newlist.append(x)newlist
['apple', 'banana', 'mango']
Otras de las cosas potentes de Python son las list comprehensions
, que permiten hacer todo en una sola l铆nea y que el c贸digo quede m谩s compacto
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]newlist = [x for x in fruits if "a" in x]newlist
['apple', 'banana', 'mango']
La sintaxis es la siguiente:
newlist = [expression for item in iterable if condition == True]
Se puede aprovechar para realizar operaciones en la lista original
newlist = [x.upper() for x in fruits if "a" in x]newlist
['APPLE', 'BANANA', 'MANGO']
2.3.1.3. Ordenar listas
Para ordenar listas usamos el m茅todo sort()
lista = [5, 8, 3, 4, 9, 5, 6]lista.sort()lista
[3, 4, 5, 5, 6, 8, 9]
Tambi茅n nos las ordena alfab茅ticamente
lista = ["orange", "mango", "kiwi", "pineapple", "banana"]lista.sort()lista
['banana', 'kiwi', 'mango', 'orange', 'pineapple']
A la hora de ordenar alfab茅ticamente, distingue entre may煤sculas y min煤sculas
lista = ["orange", "mango", "kiwi", "Pineapple", "banana"]lista.sort()lista
['Pineapple', 'banana', 'kiwi', 'mango', 'orange']
Se pueden ordenar en orden descendente mediante el atributo reverse = True
lista = [5, 8, 3, 4, 9, 5, 6]lista.sort(reverse = True)lista
[9, 8, 6, 5, 5, 4, 3]
Se pueden ordenar de la manera que queramos mediante el atributo key
def myfunc(n):# devuelve el valor absoluto de n - 50return abs(n - 50)lista = [100, 50, 65, 82, 23]lista.sort(key = myfunc)lista
[50, 65, 23, 82, 100]
Se puede aprovechar esto para que, por ejemplo, a la hora de ordenar no distinga entre may煤sculas y min煤sculas
lista = ["orange", "mango", "kiwi", "Pineapple", "banana"]lista.sort(key = str.lower)lista
['banana', 'kiwi', 'mango', 'orange', 'Pineapple']
Se puede invertir la lista mediante el m茅todo reverse
lista = [5, 8, 3, 4, 9, 5, 6]lista.reverse()lista
[6, 5, 9, 4, 3, 8, 5]
2.3.1.4. Copiar listas
No se pueden copiar listas mediante lista1 = lista2
, ya que si se modifica lista1
tambi茅n se modifica lista2
lista1 = [5, 8, 3, 4, 9, 5, 6]lista2 = lista1lista1[0] = Truelista2
[True, 8, 3, 4, 9, 5, 6]
Por lo que hay que usar el m茅todo copy()
lista1 = [5, 8, 3, 4, 9, 5, 6]lista2 = lista1.copy()lista1[0] = Truelista2
[5, 8, 3, 4, 9, 5, 6]
脫 hay que usar el constructor de listas list()
lista1 = [5, 8, 3, 4, 9, 5, 6]lista2 = list(lista1)lista1[0] = Truelista2
[5, 8, 3, 4, 9, 5, 6]
2.3.1.5. Concatenar listas
Se pueden concatenar listas mediante el operador +
lista1 = [5, 8, 3, 4, 9, 5, 6]lista2 = ['a', 'b', 'c']lista = lista1 + lista2lista
[5, 8, 3, 4, 9, 5, 6, 'a', 'b', 'c']
O mediante el m茅todo extend
lista1 = [5, 8, 3, 4, 9, 5, 6]lista2 = ['a', 'b', 'c']lista1.extend(lista2)lista1
[5, 8, 3, 4, 9, 5, 6, 'a', 'b', 'c']
Otra forma de concatenar es repetir la tupla X veces mediante el operador *
lista1 = ['a', 'b', 'c']lista2 = lista1 * 3lista2
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
2.3.2. Tuplas
Las tuplas son similares a las listas, guardan m煤ltiples 铆tems en una variable, pueden contener 铆tems de distintos tipos, pero no se pueden modificar ni reordenar. Se definen mediante ()
, con los 铆tems separados por comas
Al no poderse modificar, hace que las tuplas se ejecuten un poco m谩s r谩pido que las listas, por lo que si no necesitas modificar los datos, es mejor utilizar tuplas en vez de listas
tupla = ('item0', 1, True, 3.3, 'item4', True)tupla
('item0', 1, True, 3.3, 'item4', True)
Se puede obtener su longitud mediante la funci贸n len()
len (tupla)
6
Para crear tuplas con un 煤nico elemento es necesario a帽adir una coma
tupla = ('item0',)tupla, type(tupla)
(('item0',), tuple)
Para acceder a un elemento de la tupla se procede igual que con las listas
tupla = ('item0', 1, True, 3.3, 'item4', True)print(tupla[0])print(tupla[-1])print(tupla[2:4])print(tupla[-4:-2])
item0True(True, 3.3)(True, 3.3)
Podemos comprobar si hay un item en la tupla
'item4' in tupla
True
2.3.2.1. Modificar tuplas
Aunque las tuplas no son modificables, se pueden modificar convirti茅ndolas a listas, modificando la lista y despu茅s volver a convertirla en una tupla
lista = list(tupla)lista[4] = 'ITEM4'tupla = tuple(lista)tupla
('item0', 1, True, 3.3, 'ITEM4', True)
Al convertirla a lista, podemos hacer todas las modificaciones vistas en las listas
Lo que s铆 se puede es eliminar la tupla completa
del tuplaif 'tupla' not in locals():print("tupla eliminada")
tupla eliminada
2.3.2.2. Desempaquetar tuplas
Cuando creamos tuplas, en realidad estamos empaquetando datos
tupla = ('item0', 1, True, 3.3, 'item4', True)tupla
('item0', 1, True, 3.3, 'item4', True)
pero podemos desempaquetarlos
item0, item1, item2, item3, item4, item5 = tuplaitem0, item1, item2, item3, item4, item5
('item0', 1, True, 3.3, 'item4', True)
Si queremos sacar menos datos que la longitud de la tupla a帽adimos un *
item0, item1, item2, *item3 = tuplaitem0, item1, item2, item3
('item0', 1, True, [3.3, 'item4', True])
Se puede poner el asterisco *
en otra parte si por ejemplo lo que queremos es el 煤ltimo 铆tem
item0, item1, *item2, item5 = tuplaitem0, item1, item2, item5
('item0', 1, [True, 3.3, 'item4'], True)
2.3.2.3. Concatenar tuplas
Se pueden concatenar tuplas mediante el operador +
tupla1 = ("a", "b" , "c")tupla2 = (1, 2, 3)tupla3 = tupla1 + tupla2tupla3
('a', 'b', 'c', 1, 2, 3)
Otra forma de concatenar es repetir la tupla X veces mediante el operador *
tupla1 = ("a", "b" , "c")tupla2 = tupla1 * 3tupla2
('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
2.3.2.4. M茅todos de las tuplas
Las tuplas tienen dos m茅todos, el primero es el m茅todo count()
que devuelve el n煤mero de veces que aparece un 铆tem dentro de la tupla
tupla = (5, 4, 6, 5, 7, 8, 5, 3, 1, 5)tupla.count(5)
4
Otro m茅todo es index()
que devuelve la primera posici贸n de un 铆tem dentro de la tupla
tupla = (5, 4, 6, 5, 7, 8, 5, 3, 1, 5)tupla.index(5)
0
2.3.3. Range
Con range()
podemos crear una secuencia de n煤meros, comenzando desde 0 (de forma predeterminada), se incrementa en 1 (de forma predeterminada) y se detiene antes de un n煤mero especificado
range(start, stop, step)
Por ejemplo, si queremos una secuencia de 0 a 5 (sin incluir el 5)
for i in range(5):print(f'{i} ', end='')
0 1 2 3 4
Si por ejemplo no queremos que empiece en 0
for i in range(2, 5):print(f'{i} ', end='')
2 3 4
for i in range(-2, 5):print(f'{i} ', end='')
-2 -1 0 1 2 3 4
Por 煤ltimo, si no queremos que se incremente en 1, si por ejemplo queremos una secuencia de n煤meros pares.
for i in range(0, 10, 2):print(f'{i} ', end='')
0 2 4 6 8
2.4. Diccionarios
Los diccionarios se usan para guardar datos en pares key:value
. Son modificables, no ordenados y no permiten duplicidades. Se definen mediante los s铆mbolos {}
. Admiten 铆tems de distintos tipos de datos
diccionario = {"brand": "Ford","model": "Mustang","year": 1964,"colors": ["red", "white", "blue"]}diccionario
{'brand': 'Ford','model': 'Mustang','year': 1964,'colors': ['red', 'white', 'blue']}
Como se ha dicho no permiten duplicidades
diccionario = {"brand": "Ford","model": "Mustang","year": 1964,"year": 2000,"colors": ["red", "white", "blue"]}diccionario["year"]
2000
Se puede obtener su longitud mediante la funci贸n len()
len(diccionario)
4
Como se puede ver la longitud es 4 y no 5, ya que year
lo cuenta solo una vez
2.4.1. Acceder a los items
Para acceder a un elemento lo podemos hacer a trav茅s de su key
diccionario["model"]
'Mustang'
Tambi茅n se puede acceder mediante el m茅todo get
diccionario.get("model")
'Mustang'
Para saber todas las key
s de los diccionarios se puede usar el m茅todo keys()
diccionario.keys()
dict_keys(['brand', 'model', 'year', 'colors'])
Se puede usar una variable para apuntar a las key
s del diccionario, con lo que llam谩ndola una vez es necesario
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se declara una vez la variable que apunta a las keysx = diccionario.keys()print(x)# Se a帽ade una nueva keydiccionario["color"] = "white"# Se consulta la variable que apunta a las keyprint(x)
dict_keys(['brand', 'model', 'year'])dict_keys(['brand', 'model', 'year', 'color'])
Para obtener los valores del diccionario se puede usar el m茅todo values()
diccionario.values()
dict_values(['Ford', 'Mustang', 1964, 'white'])
Se puede usar una variable para apuntar a los values
s del diccionario, con lo que llam谩ndola una vez es necesario
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se declara una vez la variable que apunta a los valuesx = diccionario.values()print(x)# Se modifica un valuediccionario["year"] = 2020# Se consulta la variable que apunta a los valuesprint(x)
dict_values(['Ford', 'Mustang', 1964])dict_values(['Ford', 'Mustang', 2020])
Si lo que se quiere son los item
s enteros, es decir key
s y value
s hay que usar el m茅todo items()
diccionario.items()
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 2020)])
Se puede usar una variable para apuntar a los item
s del diccionario, con lo que llam谩ndola una vez es necesario
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se declara una vez la variable que apunta a los itemsx = diccionario.items()print(x)# Se modifica un valuediccionario["year"] = 2020# Se consulta la variable que apunta a los itemsprint(x)
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 1964)])dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 2020)])
Se puede comprobar si una key
existe en el diccionario
"model" in diccionario
True
2.4.2. Modificar los 铆tems
Se puede modificar un item
accediendo a 茅l directamente
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se modifica un itemdiccionario["year"] = 2020diccionario
{'brand': 'Ford', 'model': 'Mustang', 'year': 2020}
O se puede modificar mediante el m茅todo update()
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se modifica un itemdiccionario.update({"year": 2020})diccionario
{'brand': 'Ford', 'model': 'Mustang', 'year': 2020}
2.4.3. A帽adir 铆tems
Se puede a帽adir un item
agreg谩ndolo de esta manera:
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se modifica un itemdiccionario["colour"] = "blue"diccionario
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'colour': 'blue'}
脫 se puede agregar mediante el m茅todo update()
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se modifica un itemdiccionario.update({"colour": "blue"})diccionario
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'colour': 'blue'}
2.4.4. Eliminar items
Se puede eliminar un item
con una key
espec铆fica mediante el m茅todo pop()
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se elimina un itemdiccionario.pop("model")diccionario
{'brand': 'Ford', 'year': 1964}
O se puede eliminar un item
con una key
espec铆fica mediante del
indicando el nombre de la key
entre los s铆mbolos []
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se elimina un itemdel diccionario["model"]diccionario
{'brand': 'Ford', 'year': 1964}
Se elimina el diccionario entero si se usa del
y no se especifica la key
de un item
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se elimina un itemdel diccionarioif 'diccionario' not in locals():print("diccionario eliminado")
diccionario eliminado
Si lo que se quiere es eliminar el 煤ltimo item
introducido se puede usar el m茅todo popitem()
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}# Se elimina el 煤ltimo item introducidodiccionario.popitem()diccionario
{'brand': 'Ford', 'model': 'Mustang'}
Si se quiere limpiar el diccionario hay que usar el m茅todo clear()
diccionario = {"brand": "Ford","model": "Mustang","year": 1964}diccionario.clear()diccionario
{}
2.4.5. Copiar diccionarios
No se pueden copiar diccionarios mediante diccionario1 = diccionario2
, ya que si se modifica diccionario1
tambi茅n se modifica diccionario2
diccionario1 = {"brand": "Ford","model": "Mustang","year": 1964}diccionario2 = diccionario1diccionario1["year"] = 2000diccionario2["year"]
2000
Por lo que hay que usar el m茅todo copy()
diccionario1 = {"brand": "Ford","model": "Mustang","year": 1964}diccionario2 = diccionario1.copy()diccionario1["year"] = 2000diccionario2["year"]
1964
脫 hay que usar el constructor de diccionarios `dict()
diccionario1 = {"brand": "Ford","model": "Mustang","year": 1964}diccionario2 = dict(diccionario1)diccionario1["year"] = 2000diccionario2["year"]
1964
2.4.6. Diccionarios anidados
Los diccionarios pueden tener items
s de cualquier tipo de dato, incluso otros diccionarios. A este tipo de diccionarios se les denomina diccionarios nested
diccionario_nested = {"child1" : {"name" : "Emil","year" : 2004},"child2" : {"name" : "Tobias","year" : 2007},"child3" : {"name" : "Linus","year" : 2011}}diccionario_nested
{'child1': {'name': 'Emil', 'year': 2004},'child2': {'name': 'Tobias', 'year': 2007},'child3': {'name': 'Linus', 'year': 2011}}
child1 = {"name" : "Emil","year" : 2004}child2 = {"name" : "Tobias","year" : 2007}child3 = {"name" : "Linus","year" : 2011}diccionario_nested = {"child1" : child1,"child2" : child2,"child3" : child3}diccionario_nested
{'child1': {'name': 'Emil', 'year': 2004},'child2': {'name': 'Tobias', 'year': 2007},'child3': {'name': 'Linus', 'year': 2011}}
2.4.7. M茅todos de los diccionarios
Estos son los m茅todos que se pueden usar en los diccionarios
2.4.8. Dictionary comprehension
Igual que pod铆amos hacer list comprehensions
mediante la sintaxis
list_comprehension = [expression for item in iterable if condition == True]
Podemos hacer dictionaries comprehensions
mediante la siguiente sintaxis
dictionary_comprehension = {key_expression: value_expression for item in iterable if condition == True}```
Veamos un ejemplo
dictionary_comprehension = {x: x**2 for x in (2, 4, 6) if x > 2}dictionary_comprehension
{4: 16, 6: 36}
2.5. Sets
2.5.1. Set
Los sets
se utilizan en Python para guardar un conjunto de items en una sola variable. Se pueden guardar items de distintos tipos. Son no ordenados y no tienen 铆ndice.
Se diferencian de las listas en que no tienen ni orden ni 铆ndice.
Se declaran mediante los s铆mbolos {}
Como set
es una palabra reservada en Python creamos un set
con el nombre set_
set_ = {'item0', 1, 5.3, "item4", 5, 6.6}set_
{1, 5, 5.3, 6.6, 'item0', 'item4'}
No puede haber 铆tems duplicados, si encuentra alg煤n 铆tem duplicado se queda solo con uno
set_ = {'item0', 1, 5.3, "item4", 5, 6.6, 'item0'}set_
{1, 5, 5.3, 6.6, 'item0', 'item4'}
Se puede obtener la longitud del set
mediante la funci贸n len()
len(set_)
6
Como se puede ver la longitud del set es 6 y no 7, ya que se queda con un solo 'item0'
Se puede comprobar si un item se encuentra en el set
'item4' in set_
True
2.5.1.1. A帽adir 铆tems
Se puede a帽adir un elemento al set mediante el m茅todo add()
set_.add(8.8)set_
{1, 5, 5.3, 6.6, 8.8, 'item0', 'item4'}
Se puede agregar otro set mediante el m茅todo `update()'
set2 = {"item5", "item6", 7}set_.update(set2)set_
{1, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6'}
Tambi茅n se pueden a帽adir items de tipos de datos iterables de Python
lista = ["item9", 10, 11.2]set_.update(lista)set_
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6', 'item9'}
2.5.1.2. Eliminar 铆tems
Se puede eliminar un 铆tem determinado mediante el m茅todo remove()
set_.remove('item9')set_
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6'}
O mediante el m茅todo discard()
set_.discard('item6')set_
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5'}
Mediante el m茅todo pop()
se puede eliminar el 煤ltimo item, pero como los set
s no son ordenados no hay manera de saber cu谩l es el 煤ltimo item. El m茅todo pop()
devuelve el item eliminado
print(f"set antes de pop(): {set_}")eliminado = set_.pop()print(f"Se ha eliminado {eliminado}")
set antes de pop(): {1, 5, 5.3, 6.6, 8.8, 7, 10, 11.2, 'item5', 'item0', 'item4'}Se ha eliminado 1
Mediante el m茅todo clear()
se puede vaciar el conjunto
set_.clear()set_
set()
Por 煤ltimo, con del
se puede eliminar el set
del set_if 'set_' not in locals():print("set eliminado")
set eliminado
2.5.1.3. Unir 铆tems
Una forma de unir sets es mediante el m茅todo union()
set1 = {"a", "b" , "c"}set2 = {1, 2, 3}set3 = set1.union(set2)set3
{1, 2, 3, 'a', 'b', 'c'}
Otra forma es mediante el m茅todo update()
, pero de esta manera se a帽ade un set en otro, no se crea uno nuevo
set1 = {"a", "b" , "c"}set2 = {1, 2, 3}set1.update(set2)set1
{1, 2, 3, 'a', 'b', 'c'}
Estos m茅todos de uni贸n eliminan los duplicados, pero si queremos obtener los elementos duplicados en dos sets usamos el m茅todo intersection()
set1 = {"apple", "banana", "cherry"}set2 = {"google", "microsoft", "apple"}set3 = set1.intersection(set2)set3
{'apple'}
Si queremos obtener los elementos duplicados en dos sets, pero sin crear un set nuevo, usamos el m茅todo intersection_update()
set1 = {"apple", "banana", "cherry"}set2 = {"google", "microsoft", "apple"}set1.intersection_update(set2)set1
{'apple'}
Ahora al rev茅s, si queremos quedarnos con los no duplicados usamos el m茅todo symmetric_difference()
.
La diferencia entre esto y la uni贸n entre dos sets es que en la uni贸n se queda con todos los 铆tems, pero los que est谩n duplicados solo los coge una vez. Ahora nos quedamos con los que no est谩n duplicados
set1 = {"apple", "banana", "cherry"}set2 = {"google", "microsoft", "apple"}set3 = set1.symmetric_difference(set2)set3
{'banana', 'cherry', 'google', 'microsoft'}
Si queremos quedarnos con los no duplicados sin crear un nuevo set usamos el m茅todo symmetric_difference_update()
set1 = {"apple", "banana", "cherry"}set2 = {"google", "microsoft", "apple"}set1.symmetric_difference_update(set2)set1
{'banana', 'cherry', 'google', 'microsoft'}
2.5.1.4. M茅todos de los sets
Estos son los m茅todos que se pueden usar en los sets
2.5.2. FrozenSet
Los frozenset
s son como los set
s pero con la salvedad de que son inmutables, al igual que las tupla
s son como las list
s pero inmutables. Por lo que no podremos a帽adir o eliminar items
2.6. Booleanos
Hay solo dos booleanos en Python: True
y False
Mediante la funci贸n bool()
se puede evaluar si cualquier cosa es True
o False
print(bool("Hello"))print(bool(15))print(bool(0))
TrueTrueFalse
2.6.1. Otros tipos de datos True y False
Los siguientes datos son True
:* Cualquier string que no est茅 vac铆o* Cualquier n煤mero excepto el 0
- Cualquier lista, tupla, diccionario o set que no est茅 vac铆o
print(bool("Hola"))print(bool(""))
TrueFalse
print(bool(3))print(bool(0))
TrueFalse
lista = [1, 2, 3]print(bool(lista))lista = []print(bool(lista))
TrueFalse
tupla = (1, 2, 3)print(bool(tupla))tupla = ()print(bool(tupla))
TrueFalse
diccionario = {"brand": "Ford","model": "Mustang","year": 1964,"colors": ["red", "white", "blue"]}print(bool(diccionario))diccionario.clear()print(bool(diccionario))
TrueFalse
set_ = {'item0', 1, 5.3, "item4", 5, 6.6}print(bool(set_))set_.clear()print(bool(set_))
TrueFalse
2.7. Binarios
2.7.1. Bytes
El tipo bytes
es una secuencia inmutable de bytes. Solo admiten caracteres ASCII. Tambi茅n se pueden representar los bytes mediante n煤meros enteros cuyos valores deben cumplir 0 <= x < 256
Para crear un tipo byte debemos introducir antes el car谩cter b
byte = b"MaximoFN"byte
b'MaximoFN'
Tambi茅n se pueden crear mediante su constructor bytes()
byte = bytes(10)byte
b' '
byte = bytes(range(10))byte
b' '
Se pueden concatenar bytes mediante el operador +
byte1 = b'DeepMax'byte2 = b'FN'byte3 = byte1 + byte2byte3
b'DeepMaxFN'
脫 mediante la repetici贸n con el operador *
byte1 = b'MaximoFN 'byte2 = byte1 * 3byte2
b'MaximoFN MaximoFN MaximoFN '
Podemos comprobar si un car谩cter est谩 dentro de la cadena
b'D' in byte1
False
Estos son los m茅todos que se pueden usar en los bytes
2.7.2. Bytearray
Los bytearray
s son iguales que los bytes
solo que son mutables
byte_array = bytearray(b'MaximoFN')byte_array
bytearray(b'MaximoFN')
2.7.3. MemoryView
Los objetos memoryview
permiten que el c贸digo Python acceda a los datos internos de un objeto que admite el protocolo de buffer sin realizar copias.
La funci贸n memoryview()
permite el acceso directo de lectura y escritura a los datos orientados a bytes de un objeto sin necesidad de copiarlos primero. Eso puede generar grandes ganancias de rendimiento cuando se opera con objetos grandes, ya que no crea una copia al cortar.
Protocolo de b煤fer, puede crear otro objeto de acceso para modificar los datos grandes sin copiarlos. Esto hace que el programa utilice menos memoria y aumente la velocidad de ejecuci贸n.
byte_array = bytearray('XYZ', 'utf-8')print(f'Antes de acceder a la memoria: {byte_array}')mem_view = memoryview(byte_array)mem_view[2]= 74print(f'Despu茅s de acceder a la memoria: {byte_array}')
Antes de acceder a la memoria: bytearray(b'XYZ')Despu茅s de acceder a la memoria: bytearray(b'XYJ')
3. Operadores
3.1. Operadores aritm茅ticos
Operador suma +
3 + 5
8
Operador resta -
3 - 5
-2
Operador multiplicaci贸n *
3 * 5
15
Operador divisi贸n /
3 / 5
0.6
Operador m贸dulo %
. Devuelve el resto de una divisi贸n
25 % 2
1
Operador exponente **
5 ** 2
25
Operador divisi贸n entera //
25 // 2
12
3.2. Operadores de comparaci贸n
Operador es igual ==
1 == 1
True
Operador es diferente !=
1 != 2
True
Operador es mayor que >
3 > 2
True
Operador es menor que <
2 < 3
True
Operador es mayor o igual que >=
3 >= 3
True
Operador es menor o igual que <=
3 <= 3
True
3.3. Operadores l贸gicos
Operador and
True and True
True
Operador or
True or False
True
Operador not
not False
True
3.4. Operadores de identidad
Operador is
5.3 is 5.3
True
Operador is not
5.3 is not 5
True
3.5. Operadores de pertenencia
Operador in
x = ["apple", "banana"]"banana" in x
True
Operador not in
x = ["apple", "banana"]"orange" not in x
True
3.6. Operadores bit a bit
Operador AND &
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101c = a & b; # 12 = 0000 1100c
12
Operador OR |
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101c = a | b; # 61 = 0011 1101c
61
Operador XOR ^
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101c = a ^ b; # 49 = 0011 0001c
49
Operador NOT ~
a = 60 # 60 = 0011 1100c = ~a; # -61 = 1100 0011c
-61
Operador desplazamiento hacia la izquierda <<
a = 60 # 60 = 0011 1100c = a << 2; # 240 = 1111 0000c
240
Operador desplazamiento hacia la derecha >>
a = 60 # 60 = 0011 1100c = a >> 2; # 15 = 0000 1111c
15
3.7. Operadores de asignaci贸n
Operador `=
a = 5a
5
Operador +=
. x += y
es equivalente a x = x + y
a += 5a
10
Operador -=
. x -= y
es equivalente a `x = x - y
a -= 5a
5
Operador *=
. x *= y
es equivalente a `x = x * y
a *= 3a
15
Operador /=
. x /= y
es equivalente a `x = x / y
a /= 3a
5.0
Operador %=
. x %= y
es equivalente a `x = x % y
a = 25a %= 2a
1
Operador //=
. x //= y
es equivalente a `x = x // y
a = 25a //= 2a
12
Operador **=
. x **= y
es equivalente a `x = x ** y
a = 5a **= 2a
25
Operador &=
. x &= y
es equivalente a `x = x & y
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101a &= b; # 12 = 0000 1100a
12
Operador |=
. x |= y
es equivalente a x = x | y
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101a |= b; # 61 = 0011 1101a
61
Operador ^=
. x ^= y
es equivalente a `x = x ^ y
a = 60 # 60 = 0011 1100b = 13 # 13 = 0000 1101a ^= b; # 49 = 0011 0001a
49
Operador >>=
. x >>= y
es equivalente a `x = x >> y
a = 60 # 60 = 0011 1100a <<= 2; # 240 = 1111 0000a
240
Operador <<=
. x <<= y
es equivalente a x = x << y
a = 60 # 60 = 0011 1100a >>= 2; # 15 = 0000 1111a
15
4. Control de flujo
Para poder utilizar las herramientas de control de flujo es necesario a帽adir la sentencia, dos puntos :
y en una nueva l铆nea escribir el c贸digo con indentaci贸n.
A diferencia de otros lenguajes, Python necesita la indentaci贸n (a帽adir un espacio en blanco) para definir el c贸digo de dentro de una herramienta de control de flujo
4.1. If
Mediante if
podemos crear condicionales
if len('MaximoFN') == 8:print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
Si queremos crear m谩s de una condici贸n podemos usar elif
if len('MaximoFN') < 8:print('MaximoFN tiene menos de 8 caracteres')elif len('MaximoFN') == 8:print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
Si lo que queremos es que se ejecute algo en caso de que no se cumpla ninguna de las condiciones indicadas, podemos usar else
if len('MaximoFN') < 8:print('MaximoFN tiene menos de 8 caracteres')elif len('MaximoFN') > 8:print('MaximoFN tiene m谩s de 8 caracteres')else:print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
Si queremos escribir todo en una sola l铆nea
if len('MaximoFN') == 8: print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
Igual, si queremos escribir todo en una l铆nea, pero con varias condiciones
print('MaximoFN tiene menos de 8 caracteres') if len('MaximoFN') < 8 else print('MaximoFN tiene m谩s de 8 caracteres') if len('MaximoFN') > 8 else print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
Si por ejemplo queremos hacer la estructura del if
pero no queremos, de momento, codificar una de las condiciones, podemos usar pass
if len('MaximoFN') < 8:print('MaximoFN tiene menos de 8 caracteres')elif len('MaximoFN') > 8:passelse:print('MaximoFN tiene 8 caracteres')
MaximoFN tiene 8 caracteres
4.2. While
El bucle while
se ejecuta mientras la condici贸n sea True
i = 0string = 'MaximoFN'while len(string) > i:print(string[i], end='')i += 1
MaximoFN
Si queremos que el bucle pare por alguna condici贸n usamos break
i = 0string = 'MaximoFN'while len(string) > i:if string[i] == 'F':breakprint(string[i], end='')i += 1
Maximo
Si queremos que una de las iteraciones no se ejecute por alguna raz贸n usamos continue
i = 0string = 'Maximo FN'while len(string) > i:if string[i] == ' ':i += 1continueprint(string[i], end='')i += 1
MaximoFN
Mediante else
se puede ejecutar un bloque de c贸digo si la condici贸n del while
no es True
i = 0string = 'MaximoFN'while len(string) > i:print(string[i], end='')i += 1else:print("\nSe ha terminado el while")
MaximoFNSe ha terminado el while
4.3. For
El bucle for
se usa para ejecutar c贸digo mientras se itera por una secuencia, esta secuencia puede ser cualquier elemento iterable de Python (string
, lista
, tupla
, range
, diccionario
, set
)
string = 'MaximoFN'for x in string:print(x, end='')
MaximoFN
lista = ['M', 'a', 'x', 'i', 'm', 'o', 'F', 'N']for x in lista:print(x, end='')
MaximoFN
tupla = ('M', 'a', 'x', 'i', 'm', 'o', 'F', 'N')for x in tupla:print(x, end='')
MaximoFN
string = 'MaximoFN'for i in range(len(string)):print(string[i], end='')
MaximoFN
diccionario = {"letra1": "M","letra2": "a","letra3": "x","letra4": "i","letra5": "m","letra6": "o","letra7": "F","letra8": "N",}for x in diccionario.values():print(x, end='')
MaximoFN
Tambi茅n se puede iterar por los set
s, pero como son elementos no ordenados, no tendremos control del orden de ejecuci贸n
set_ = {'M', 'a', 'x', 'i', 'm', 'o', 'F', 'N'}for x in set_:print(x, end='')
NximoaMF
Si queremos que el bucle pare por alguna condici贸n usamos break
string = 'MaximoFN'for x in string:if x == 'F':breakprint(x, end='')
Maximo
Si queremos que una de las iteraciones no se ejecute por alguna raz贸n usamos continue
string = 'Maximo FN'for x in string:if x == ' ':continueprint(x, end='')
MaximoFN
Mediante else
se puede ejecutar un bloque de c贸digo si la condici贸n del while
no es True
string = 'MaximoFN'for x in string:print(x, end='')else:print("\nSe ha terminado el for")
MaximoFNSe ha terminado el for
Si por ejemplo queremos hacer la estructura del for
pero no queremos, de momento, codificar su interior podemos usar pass
string = 'MaximoFN'for x in string:passprint('Interior del for no codificado')
Interior del for no codificado
5. Funciones
Una funci贸n es una porci贸n de c贸digo que se puede ejecutar tantas veces como quieras. Se le puede pasar argumentos y puede devolver datos como resultado
Para definir una funci贸n se comienza con la palabra reservada def
, seguido del nombre de la funci贸n, par茅ntesis ()
, dos puntos :
y a continuaci贸n en una nueva l铆nea indentado el c贸digo de la funci贸n
def funcion():print('MaximoFN')
Para llamar a la funci贸n solo es necesario escribir su nombre
funcion()
MaximoFN
A las funciones se les pueden pasar todos los argumentos que se quiera, dentro de los par茅ntesis y separados por comas
def funcion(string1, string2):print(string1 + ' ' + string2)funcion("Hola", "MaximoFN")
Hola MaximoFN
Cuando se llama a la funci贸n hay que pasarle el mismo n煤mero de argumentos que se han declarado, si se pasan m谩s o menos obtendr铆amos un error.
Si no sabemos los argumentos que va a recibir la funci贸n se puede usar *args
, es decir, poniendo un *
antes de los argumentos se indica que el n煤mero de argumentos es libre.
Al hacer esto, se le pasa una tupla
(recordemos que es inmutable) con los argumentos
def funcion(*argumentos):numero_argumentos = len(argumentos)for i in range(numero_argumentos):print(argumentos[i], end=' ')funcion("funcion", "con", "varios", "argumentos", "sin", "especificar", "cuantos")
funcion con varios argumentos sin especificar cuantos
En caso de no saber el orden de los argumentos de una funci贸n, podemos indicar el argumento que le queremos pasar indic谩ndole su nombre
def funcion(argumento1, argumento2, argumento3):print(argumento1 + ' '+ argumento2 + ' ' + argumento3)funcion(argumento3 = "MaximoFN", argumento1 = "Blog", argumento2 = "de")
Blog de MaximoFN
En caso de querer pasar los argumentos con su nombre, pero en caso de no saber cu谩ntos argumentos se van a pasar se puede usar **kwargs
. En este caso se le pasar谩 un diccionario con los argumentos
def funcion(**kargumentos):print("Autor del blog: " + kargumentos["autor"])funcion(blog = "Blog", pertenencia = "de", autor = "MaximoFN")
Autor del blog: MaximoFN
Si queremos que alg煤n argumento tenga un valor por defecto lo podemos indicar entre los par茅ntesis de la funci贸n. De esta manera, si a la hora de llamar a la funci贸n no se pasa dicho argumento, este en la funci贸n tendr谩 el valor por defecto
def funcion(argumento1, argumento2, argumento3 = "MaximoFN"):print(argumento1 + ' '+ argumento2 + ' ' + argumento3)funcion("Blog", "de")
Blog de MaximoFN
Se puede pasar cualquier tipo de dato como argumento. Por ejemplo, si se pasa una lista
como argumento, dentro de la funci贸n, dicho argumento ser谩 tratado como una lista
def funcion(argumento):longitud_lista = len(argumento)for i in range(longitud_lista):print(argumento[i], end=' ')funcion(["Blog", "de", "MaximoFN"])
Blog de MaximoFN
Las funciones pueden devolver datos, esto se hace mediante la palabra reservada return
def funcion(argumento):longitud_lista = len(argumento)string = ""for i in range(longitud_lista):string = string + argumento[i] + ' 'return stringprint(funcion(["Blog", "de", "MaximoFN"]))
Blog de MaximoFN
Pueden devolver m谩s de un dato
def funcion(argumento):longitud_lista = len(argumento)string0 = argumento[0]string1 = argumento[1]string2 = argumento[2]return string0, string1, string2dato0, dato1, dato2 = funcion(["Blog", "de", "MaximoFN"])print(dato0 + ' ' + dato1 + ' ' + dato2)
Blog de MaximoFN
Si uno de los datos devueltos no nos interesa, podemos pasar de 茅l mediante `_
def funcion(argumento):longitud_lista = len(argumento)string0 = argumento[0]string1 = argumento[1]string2 = argumento[2]return string0, string1, string2_, _, dato_de_interes = funcion(["Blog", "de", "MaximoFN"])print(dato_de_interes)
MaximoFN
Si por ejemplo queremos hacer la estructura de la funci贸n pero no queremos, de momento, codificar el interior podemos usar pass
def funcion():passfuncion()
Una funci贸n puede llamarse a s铆 misma, a esto se le llama recursi贸n o recursividad de la funci贸n. Por ejemplo podemos usar esta cualidad para calcular el factorial de un n煤mero
def factorial(n):if n == 0 or n == 1:return 1else:return n * factorial(n-1)factorial(5)
120
5.1. Built in functions
Hay una serie de funciones ya definidas en Python que se pueden usar, como por ejemplo la funci贸n abs()
, que devuelve el valor absoluto
abs(-5)
5
A continuaci贸n se muestra una lista de estas funciones
import builtinsdir(builtins)
['ArithmeticError','AssertionError','AttributeError','BaseException','BlockingIOError','BrokenPipeError','BufferError','BytesWarning','ChildProcessError','ConnectionAbortedError','ConnectionError','ConnectionRefusedError','ConnectionResetError','DeprecationWarning','EOFError','Ellipsis','EnvironmentError','Exception','False','FileExistsError','FileNotFoundError','FloatingPointError','FutureWarning','GeneratorExit','IOError','ImportError','ImportWarning','IndentationError','IndexError','InterruptedError','IsADirectoryError','KeyError','KeyboardInterrupt','LookupError','MemoryError','ModuleNotFoundError','NameError','None','NotADirectoryError','NotImplemented','NotImplementedError','OSError','OverflowError','PendingDeprecationWarning','PermissionError','ProcessLookupError','RecursionError','ReferenceError','ResourceWarning','RuntimeError','RuntimeWarning','StopAsyncIteration','StopIteration','SyntaxError','SyntaxWarning','SystemError','SystemExit','TabError','TimeoutError','True','TypeError','UnboundLocalError','UnicodeDecodeError','UnicodeEncodeError','UnicodeError','UnicodeTranslateError','UnicodeWarning','UserWarning','ValueError','Warning','ZeroDivisionError','__IPYTHON__','__build_class__','__debug__','__doc__','__import__','__loader__','__name__','__package__','__spec__','abs','all','any','ascii','bin','bool','breakpoint','bytearray','bytes','callable','chr','classmethod','compile','complex','copyright','credits','delattr','dict','dir','display','divmod','enumerate','eval','exec','filter','float','format','frozenset','get_ipython','getattr','globals','hasattr','hash','help','hex','id','input','int','isinstance','issubclass','iter','len','license','list','locals','map','max','memoryview','min','next','object','oct','open','ord','pow','print','property','range','repr','reversed','round','set','setattr','slice','sorted','staticmethod','str','sum','super','tuple','type','vars','zip']
5.2. Documentaci贸n de una funci贸n
Se puede a帽adir una explicaci贸n de una funci贸n que creemos mediante un comentario al inicio de la funci贸n, de esta manera cuando llamemos a la built in function
help()
nos mostrar谩 dicha explicaci贸n.
def funcion():"Esta es la explicaci贸n de la funci贸n"Nonehelp(funcion)
Help on function funcion in module __main__:funcion()Esta es la explicaci贸n de la funci贸n
Otra opci贸n para ver la explicaci贸n de la funci贸n es usar el m茅todo __doc__
de la funci贸n
funcion.__doc__
'Esta es la explicaci贸n de la funci贸n'
5.3. Decoradores
Los decoradores son una funcionalidad de Python que permiten a帽adir caracter铆sticas nuevas a una funci贸n Se crea una funci贸n decoradora que tiene como par谩metro otra funci贸n. Entonces la funci贸n decoradora a帽ade la caracter铆stica nueva a la funci贸n que recibe
def decorador(parametro_funcion):"""Agrega barritas arriba y abajo de la funcion"""def envoltorio():"""Aplica las barritas al texto"""print("==================")parametro_funcion()print("==================")return envoltoriodef funcion():print("MaximoFN")funcion_envoltorio = decorador(funcion)print('Funci贸n sin decoradores: ')funcion()print('\nFunci贸n con decoradores: ')funcion_envoltorio()
Funci贸n sin decoradores:MaximoFNFunci贸n con decoradores:==================MaximoFN==================
Pero otra manera m谩s potente de usar los decoradores es mediante el uso de @
y el nombre del decorador antes de la funci贸n.
Es decir, primero se define el decorador y a continuaci贸n se llama a una funci贸n con el decorador definido
def decorador2(parametro_funcion2):"""Agrega barritas arriba y abajo de la funcion"""def envoltorio2():"""Aplica las barritas al texto"""print("==================")parametro_funcion2()print("==================")return envoltorio2@decorador2def funcion2():print("MaximoFN")print('Funci贸n con decoradores: ')funcion2()
Funci贸n con decoradores:==================MaximoFN==================
5.4. *args
y **kwargs
*args
y **kwargs
son argumentos opcionales que se pueden usar al definir una funci贸n en Python. La sintaxis es la siguiente:
def mi_funcion(arg1, arg2, *args, **kwargs):
# c贸digo de la funci贸n aqu铆
5.4.1. *args
*args
se usa para enviar un n煤mero variable de argumentos a una funci贸n. Al usar *args
, puedes enviar una cantidad variable de argumentos a la funci贸n sin tener que especificar el n煤mero exacto de argumentos que necesita la funci贸n. Los argumentos se reciben en la funci贸n como una tupla.
def saludo(saludo, *nombres):for nombre in nombres:print(f"{saludo}, {nombre}")saludo("Hola", "Alicia", "Roberto", "Carlos")
Hola, AliciaHola, RobertoHola, Carlos
5.4.2. **kwargs
**kwargs
se usa de la misma manera, pero para enviar un n煤mero variable de argumentos con palabras clave (keyword arguments
) a una funci贸n. Al usar **kwargs
, puedes enviar una cantidad variable de argumentos a la funci贸n y especificar el valor de cada argumento usando su nombre. Los argumentos se reciben en la funci贸n como un diccionario.
def saludo(saludo, **personas):for key, value in personas.items():print(f"{saludo} {key}, tu edad es {value} a帽os")saludo("Hola", Juan=22, Maria=32, Pedro=25)
Hola Juan, tu edad es 22 a帽osHola Maria, tu edad es 32 a帽osHola Pedro, tu edad es 25 a帽os
6. Funciones adicionales
6.1. Funciones lambda
Una funci贸n lambda es una peque帽a funci贸n an贸nima.
Una funci贸n lambda puede tomar cualquier n煤mero de argumentos, pero solo puede tener una expresi贸n.
Las funciones lambda se definen de la siguiente manera:
lambda arguments : expression```
x = lambda a : a + 10print(x(5))
15
x = lambda a, b, c : a + b + cprint(x(5, 6, 2))
13
El poder de lambda se muestra mejor cuando las usa como una funci贸n an贸nima dentro de otra funci贸n.
def myfunc(n):return lambda a : a * nmydoubler = myfunc(2)mytripler = myfunc(3)print(f"mydoubler: {mydoubler(11)}")print(f"mytripler: {mytripler(11)}")
mydoubler: 22mytripler: 33
6.2. Funci贸n map
La funci贸n map
permite aplicar a cada elemento de una estructura iterable una funci贸n
lista = [1, 2, 3]def funcion_mas_1(valor):return valor + 1lista_modificada = list(map(funcion_mas_1, lista))lista_modificada
[2, 3, 4]
Esto es equivalente a usar list comprehension
lista_modificada = [funcion_mas_1(x) for x in lista]lista_modificada
[2, 3, 4]
6.3. Funci贸n filter
La funci贸n filter
permite seleccionar los elementos de una estructura iterable que cumplan con una condici贸n
lista = [1, 2, 3, 4, 5, 6, 7]def esPar(valor):return valor % 2 == 0lista_filtrada = list(filter(esPar, lista))lista_filtrada