Introducci贸n a Python

Introducci贸n a Python Introducci贸n a Python

Introducci贸n a Pythonlink image 0

1. Resumenlink image 1

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. python

2. Tipos de datos de Pythonlink image 2

Existen 7 tipos de datos en Python

  1. De tipo texto: str
  2. Num茅ricos: int, float, complex
  3. Secuencias: list, tuple, range
  4. Mapping: dict
  5. Sets: set, frozenset
  6. Booleanos: bool
  7. Binarios: bytes, bytearray, memoryview

Podemos obtener el tipo de dato mediante la funci贸n type()

	
type(5.)
Copy
	
float

Python es un lenguaje de tipado din谩mico, es decir, puedes tener una variable de un tipo y luego asignarle otro tipo

	
a = 5
type(a)
Copy
	
int
	
a = 'MaximoFN'
type(a)
Copy
	
str

Python tipa las variables por ti, pero si las quieres tipear t煤 se puede hacer

	
b = int(5.1)
type(b), b
Copy
	
(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. Stringslink image 3

Los strings son cadenas de caracteres, estas se pueden definir con doble comilla " o comilla simple '

	
string = "MaximoFN"
string
Copy
	
'MaximoFN'
	
string = 'MaximoFN'
string
Copy
	
'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 de
como estoy introduciendo un string
en varias lineas"""
string
Copy
	
'Este es un ejemplo de como estoy introduciendo un string en varias lineas'
	
string = '''Este es un ejemplo de
como estoy introduciendo un string
en varias lineas'''
string
Copy
	
'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)
Copy
	
Este es un ejemplo de
como estoy introduciendo un string
en 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 linea
print(string[i], end='')
Copy
	
Este es un

Podemos obtener la longitud de nuestro string mediante la funci贸n len()

	
len(string)
Copy
	
73

Chequear si hay alg煤n string determinado dentro del nuestro

	
'ejemplo' in string
Copy
	
True

Los strings tienen ciertos atributos 煤tiles, como poner todo en may煤sculas

	
print(string.upper())
Copy
	
ESTE ES UN EJEMPLO DE
COMO ESTOY INTRODUCIENDO UN STRING
EN VARIAS LINEAS

Todo en min煤sculas

	
print(string.lower())
Copy
	
este es un ejemplo de
como estoy introduciendo un string
en varias lineas

Reemplazar caracteres

	
print(string.replace('o', '@'))
Copy
	
Este es un ejempl@ de
c@m@ est@y intr@duciend@ un string
en varias lineas

Obtener todas las palabras

	
print(string.split())
Copy
	
['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
Copy
	
'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\"")
Copy
	
Este es el blog de "MaximoFN"

Lo mismo con la comilla simple, a帽adimos \'

	
print('Este es el blog de \'MaximoFN\'')
Copy
	
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\\')
Copy
	
Este es el blog de \MaximoFN\

Ya vimos antes el escape character de nueva l铆nea \n

	
print('Este es el blog de \nMaximoFN')
Copy
	
Este es el blog de
MaximoFN

Si queremos escribir desde el inicio de l铆nea a帽adimos \r

	
print('Esto no se imprimir谩 \rEste es el blog de MaximoFN')
Copy
	
Este es el blog de MaximoFN

Si queremos a帽adir un espacio grande (sangr铆a) usamos \t

	
print('Este es el blog de \tMaximoFN')
Copy
	
Este es el blog de MaximoFN

Podemos borrar un car谩cter con \b

	
print('Este es el blog de \bMaximoFN')
Copy
	
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')
Copy
	
MaximoFN

O a帽adir el c贸digo ASCII en hexadecimal mediante \xhh

	
print('\x4d\x61\x78\x69\x6d\x6f\x46\x4e')
Copy
	
MaximoFN

Por 煤ltimo, podemos convertir otro tipo de dato en un string

	
n = 5
print(type (n))
string = str(n)
print(type(string))
Copy
	
<class 'int'>
<class 'str'>

2.2. N煤meroslink image 4

2.2.1. Enteroslink image 5

N煤meros de tipo entero

	
n = 5
n, type(n)
Copy
	
(5, int)

2.2.2. Floatlink image 6

N煤meros de tipo coma flotante

	
n = 5.1
n, type(n)
Copy
	
(5.1, float)

2.2.3. Complejoslink image 7

N煤meros complejos

	
n = 3 + 5j
n, type(n)
Copy
	
((3+5j), complex)

2.2.4. Conversi贸nlink image 8

Se puede convertir entre tipos de n煤meros

	
n = 5
n = float(n)
n, type(n)
Copy
	
(5.0, float)
	
n = 5.1
n = complex(n)
n, type(n)
Copy
	
((5.1+0j), complex)
	
n = 5.1
n = int(n)
n, type(n)
Copy
	
(5, int)

No se puede convertir un n煤mero complex a tipo int o tipo float

2.3. Secuenciaslink image 9

2.3.1. Listaslink image 10

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
Copy
	
['item0', 'item1', 'item2', 'item3', 'item4', 'item5']

Podemos obtener la longitud de una lista mediante la funci贸n len()

	
len(lista)
Copy
	
6

Las listas pueden tener 铆tems de distintos tipos

	
lista = ['item0', 1, True, 5.3, "item4", 5, 6.6]
lista
Copy
	
['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]
Copy
	
'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]
Copy
	
6.6

Si en vez de la 煤ltima posici贸n de la lista queremos la pen煤ltima

	
lista[-2]
Copy
	
5

Si solo queremos un rango de valores, por ejemplo, del segundo al quinto 铆tem accedemos mediante [2:5]

	
lista[2:5]
Copy
	
[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]
Copy
	
['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:]
Copy
	
[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]
Copy
	
['item4', 5]

Se puede comprobar si un 铆tem est谩 en la lista

	
'item4' in lista
Copy
	
True
2.3.1.1. Editar listaslink image 11

Las listas en Python son din谩micas, es decir, se pueden modificar. Por ejemplo se puede modificar el tercer 铆tem

	
lista[2] = False
lista
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
['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
Copy
	
[]

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)
Copy
	
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)
Copy
	
0
2.3.1.2. List comprehensionlink image 12

Podemos operar a trav茅s de la lista

	
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []
# Iteramos por todos los items de la lista
for x in fruits:
# Si el item contiene el caracter "a" lo a帽adimos a newlist
if "a" in x:
newlist.append(x)
newlist
Copy
	
['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
Copy
	
['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
Copy
	
['APPLE', 'BANANA', 'MANGO']
2.3.1.3. Ordenar listaslink image 13

Para ordenar listas usamos el m茅todo sort()

	
lista = [5, 8, 3, 4, 9, 5, 6]
lista.sort()
lista
Copy
	
[3, 4, 5, 5, 6, 8, 9]

Tambi茅n nos las ordena alfab茅ticamente

	
lista = ["orange", "mango", "kiwi", "pineapple", "banana"]
lista.sort()
lista
Copy
	
['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
Copy
	
['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
Copy
	
[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 - 50
return abs(n - 50)
lista = [100, 50, 65, 82, 23]
lista.sort(key = myfunc)
lista
Copy
	
[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
Copy
	
['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
Copy
	
[6, 5, 9, 4, 3, 8, 5]
2.3.1.4. Copiar listaslink image 14

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 = lista1
lista1[0] = True
lista2
Copy
	
[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] = True
lista2
Copy
	
[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] = True
lista2
Copy
	
[5, 8, 3, 4, 9, 5, 6]
2.3.1.5. Concatenar listaslink image 15

Se pueden concatenar listas mediante el operador +

	
lista1 = [5, 8, 3, 4, 9, 5, 6]
lista2 = ['a', 'b', 'c']
lista = lista1 + lista2
lista
Copy
	
[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
Copy
	
[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 * 3
lista2
Copy
	
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']

2.3.2. Tuplaslink image 16

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
Copy
	
('item0', 1, True, 3.3, 'item4', True)

Se puede obtener su longitud mediante la funci贸n len()

	
len (tupla)
Copy
	
6

Para crear tuplas con un 煤nico elemento es necesario a帽adir una coma

	
tupla = ('item0',)
tupla, type(tupla)
Copy
	
(('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])
Copy
	
item0
True
(True, 3.3)
(True, 3.3)

Podemos comprobar si hay un item en la tupla

	
'item4' in tupla
Copy
	
True
2.3.2.1. Modificar tuplaslink image 17

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
Copy
	
('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 tupla
if 'tupla' not in locals():
print("tupla eliminada")
Copy
	
tupla eliminada
2.3.2.2. Desempaquetar tuplaslink image 18

Cuando creamos tuplas, en realidad estamos empaquetando datos

	
tupla = ('item0', 1, True, 3.3, 'item4', True)
tupla
Copy
	
('item0', 1, True, 3.3, 'item4', True)

pero podemos desempaquetarlos

	
item0, item1, item2, item3, item4, item5 = tupla
item0, item1, item2, item3, item4, item5
Copy
	
('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 = tupla
item0, item1, item2, item3
Copy
	
('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 = tupla
item0, item1, item2, item5
Copy
	
('item0', 1, [True, 3.3, 'item4'], True)
2.3.2.3. Concatenar tuplaslink image 19

Se pueden concatenar tuplas mediante el operador +

	
tupla1 = ("a", "b" , "c")
tupla2 = (1, 2, 3)
tupla3 = tupla1 + tupla2
tupla3
Copy
	
('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 * 3
tupla2
Copy
	
('a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c')
2.3.2.4. M茅todos de las tuplaslink image 20

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)
Copy
	
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)
Copy
	
0

2.3.3. Rangelink image 21

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='')
Copy
	
0 1 2 3 4

Si por ejemplo no queremos que empiece en 0

	
for i in range(2, 5):
print(f'{i} ', end='')
Copy
	
2 3 4
	
for i in range(-2, 5):
print(f'{i} ', end='')
Copy
	
-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='')
Copy
	
0 2 4 6 8

2.4. Diccionarioslink image 22

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
Copy
	
{'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"]
Copy
	
2000

Se puede obtener su longitud mediante la funci贸n len()

	
len(diccionario)
Copy
	
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 itemslink image 23

Para acceder a un elemento lo podemos hacer a trav茅s de su key

	
diccionario["model"]
Copy
	
'Mustang'

Tambi茅n se puede acceder mediante el m茅todo get

	
diccionario.get("model")
Copy
	
'Mustang'

Para saber todas las keys de los diccionarios se puede usar el m茅todo keys()

	
diccionario.keys()
Copy
	
dict_keys(['brand', 'model', 'year', 'colors'])

Se puede usar una variable para apuntar a las keys 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 keys
x = diccionario.keys()
print(x)
# Se a帽ade una nueva key
diccionario["color"] = "white"
# Se consulta la variable que apunta a las key
print(x)
Copy
	
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()
Copy
	
dict_values(['Ford', 'Mustang', 1964, 'white'])

Se puede usar una variable para apuntar a los valuess 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 values
x = diccionario.values()
print(x)
# Se modifica un value
diccionario["year"] = 2020
# Se consulta la variable que apunta a los values
print(x)
Copy
	
dict_values(['Ford', 'Mustang', 1964])
dict_values(['Ford', 'Mustang', 2020])

Si lo que se quiere son los items enteros, es decir keys y values hay que usar el m茅todo items()

	
diccionario.items()
Copy
	
dict_items([('brand', 'Ford'), ('model', 'Mustang'), ('year', 2020)])

Se puede usar una variable para apuntar a los items 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 items
x = diccionario.items()
print(x)
# Se modifica un value
diccionario["year"] = 2020
# Se consulta la variable que apunta a los items
print(x)
Copy
	
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
Copy
	
True

2.4.2. Modificar los 铆temslink image 24

Se puede modificar un item accediendo a 茅l directamente

	
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario["year"] = 2020
diccionario
Copy
	
{'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 item
diccionario.update({"year": 2020})
diccionario
Copy
	
{'brand': 'Ford', 'model': 'Mustang', 'year': 2020}

2.4.3. A帽adir 铆temslink image 25

Se puede a帽adir un item agreg谩ndolo de esta manera:

	
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
# Se modifica un item
diccionario["colour"] = "blue"
diccionario
Copy
	
{'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 item
diccionario.update({"colour": "blue"})
diccionario
Copy
	
{'brand': 'Ford', 'model': 'Mustang', 'year': 1964, 'colour': 'blue'}

2.4.4. Eliminar itemslink image 26

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 item
diccionario.pop("model")
diccionario
Copy
	
{'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 item
del diccionario["model"]
diccionario
Copy
	
{'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 item
del diccionario
if 'diccionario' not in locals():
print("diccionario eliminado")
Copy
	
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 introducido
diccionario.popitem()
diccionario
Copy
	
{'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
Copy
	
{}

2.4.5. Copiar diccionarioslink image 27

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 = diccionario1
diccionario1["year"] = 2000
diccionario2["year"]
Copy
	
2000

Por lo que hay que usar el m茅todo copy()

	
diccionario1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario2 = diccionario1.copy()
diccionario1["year"] = 2000
diccionario2["year"]
Copy
	
1964

脫 hay que usar el constructor de diccionarios `dict()

	
diccionario1 = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
}
diccionario2 = dict(diccionario1)
diccionario1["year"] = 2000
diccionario2["year"]
Copy
	
1964

2.4.6. Diccionarios anidadoslink image 28

Los diccionarios pueden tener itemss 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
Copy
	
{'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
Copy
	
{'child1': {'name': 'Emil', 'year': 2004},
'child2': {'name': 'Tobias', 'year': 2007},
'child3': {'name': 'Linus', 'year': 2011}}

2.4.7. M茅todos de los diccionarioslink image 29

Estos son los m茅todos que se pueden usar en los diccionarios

2.4.8. Dictionary comprehensionlink image 30

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
Copy
	
{4: 16, 6: 36}

2.5. Setslink image 31

2.5.1. Setlink image 32

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_
Copy
	
{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_
Copy
	
{1, 5, 5.3, 6.6, 'item0', 'item4'}

Se puede obtener la longitud del set mediante la funci贸n len()

	
len(set_)
Copy
	
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_
Copy
	
True
2.5.1.1. A帽adir 铆temslink image 33

Se puede a帽adir un elemento al set mediante el m茅todo add()

	
set_.add(8.8)
set_
Copy
	
{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_
Copy
	
{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_
Copy
	
{1, 10, 11.2, 5, 5.3, 6.6, 7, 8.8, 'item0', 'item4', 'item5', 'item6', 'item9'}
2.5.1.2. Eliminar 铆temslink image 34

Se puede eliminar un 铆tem determinado mediante el m茅todo remove()

	
set_.remove('item9')
set_
Copy
	
{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_
Copy
	
{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 sets 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}")
Copy
	
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_
Copy
	
set()

Por 煤ltimo, con del se puede eliminar el set

	
del set_
if 'set_' not in locals():
print("set eliminado")
Copy
	
set eliminado
2.5.1.3. Unir 铆temslink image 35

Una forma de unir sets es mediante el m茅todo union()

	
set1 = {"a", "b" , "c"}
set2 = {1, 2, 3}
set3 = set1.union(set2)
set3
Copy
	
{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
Copy
	
{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
Copy
	
{'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
Copy
	
{'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
Copy
	
{'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
Copy
	
{'banana', 'cherry', 'google', 'microsoft'}
2.5.1.4. M茅todos de los setslink image 36

Estos son los m茅todos que se pueden usar en los sets

2.5.2. FrozenSetlink image 37

Los frozensets son como los sets pero con la salvedad de que son inmutables, al igual que las tuplas son como las lists pero inmutables. Por lo que no podremos a帽adir o eliminar items

2.6. Booleanoslink image 38

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))
Copy
	
True
True
False

2.6.1. Otros tipos de datos True y Falselink image 39

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(""))
Copy
	
True
False
	
print(bool(3))
print(bool(0))
Copy
	
True
False
	
lista = [1, 2, 3]
print(bool(lista))
lista = []
print(bool(lista))
Copy
	
True
False
	
tupla = (1, 2, 3)
print(bool(tupla))
tupla = ()
print(bool(tupla))
Copy
	
True
False
	
diccionario = {
"brand": "Ford",
"model": "Mustang",
"year": 1964,
"colors": ["red", "white", "blue"]
}
print(bool(diccionario))
diccionario.clear()
print(bool(diccionario))
Copy
	
True
False
	
set_ = {'item0', 1, 5.3, "item4", 5, 6.6}
print(bool(set_))
set_.clear()
print(bool(set_))
Copy
	
True
False

2.7. Binarioslink image 40

2.7.1. Byteslink image 41

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
Copy
	
b'MaximoFN'

Tambi茅n se pueden crear mediante su constructor bytes()

	
byte = bytes(10)
byte
Copy
	
b''
	
byte = bytes(range(10))
byte
Copy
	
b' '

Se pueden concatenar bytes mediante el operador +

	
byte1 = b'DeepMax'
byte2 = b'FN'
byte3 = byte1 + byte2
byte3
Copy
	
b'DeepMaxFN'

脫 mediante la repetici贸n con el operador *

	
byte1 = b'MaximoFN '
byte2 = byte1 * 3
byte2
Copy
	
b'MaximoFN MaximoFN MaximoFN '

Podemos comprobar si un car谩cter est谩 dentro de la cadena

	
b'D' in byte1
Copy
	
False

Estos son los m茅todos que se pueden usar en los bytes

2.7.2. Bytearraylink image 42

Los bytearrays son iguales que los bytes solo que son mutables

	
byte_array = bytearray(b'MaximoFN')
byte_array
Copy
	
bytearray(b'MaximoFN')

2.7.3. MemoryViewlink image 43

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]= 74
print(f'Despu茅s de acceder a la memoria: {byte_array}')
Copy
	
Antes de acceder a la memoria: bytearray(b'XYZ')
Despu茅s de acceder a la memoria: bytearray(b'XYJ')

3. Operadoreslink image 44

3.1. Operadores aritm茅ticoslink image 45

Operador suma +

	
3 + 5
Copy
	
8

Operador resta -

	
3 - 5
Copy
	
-2

Operador multiplicaci贸n *

	
3 * 5
Copy
	
15

Operador divisi贸n /

	
3 / 5
Copy
	
0.6

Operador m贸dulo %. Devuelve el resto de una divisi贸n

	
25 % 2
Copy
	
1

Operador exponente **

	
5 ** 2
Copy
	
25

Operador divisi贸n entera //

	
25 // 2
Copy
	
12

3.2. Operadores de comparaci贸nlink image 46

Operador es igual ==

	
1 == 1
Copy
	
True

Operador es diferente !=

	
1 != 2
Copy
	
True

Operador es mayor que >

	
3 > 2
Copy
	
True

Operador es menor que <

	
2 < 3
Copy
	
True

Operador es mayor o igual que >=

	
3 >= 3
Copy
	
True

Operador es menor o igual que <=

	
3 <= 3
Copy
	
True

3.3. Operadores l贸gicoslink image 47

Operador and

	
True and True
Copy
	
True

Operador or

	
True or False
Copy
	
True

Operador not

	
not False
Copy
	
True

3.4. Operadores de identidadlink image 48

Operador is

	
5.3 is 5.3
Copy
	
True

Operador is not

	
5.3 is not 5
Copy
	
True

3.5. Operadores de pertenencialink image 49

Operador in

	
x = ["apple", "banana"]
"banana" in x
Copy
	
True

Operador not in

	
x = ["apple", "banana"]
"orange" not in x
Copy
	
True

3.6. Operadores bit a bitlink image 50

Operador AND &

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a & b; # 12 = 0000 1100
c
Copy
	
12

Operador OR |

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a | b; # 61 = 0011 1101
c
Copy
	
61

Operador XOR ^

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a ^ b; # 49 = 0011 0001
c
Copy
	
49

Operador NOT ~

	
a = 60 # 60 = 0011 1100
c = ~a; # -61 = 1100 0011
c
Copy
	
-61

Operador desplazamiento hacia la izquierda <<

	
a = 60 # 60 = 0011 1100
c = a << 2; # 240 = 1111 0000
c
Copy
	
240

Operador desplazamiento hacia la derecha >>

	
a = 60 # 60 = 0011 1100
c = a >> 2; # 15 = 0000 1111
c
Copy
	
15

3.7. Operadores de asignaci贸nlink image 51

Operador `=

	
a = 5
a
Copy
	
5

Operador +=. x += y es equivalente a x = x + y

	
a += 5
a
Copy
	
10

Operador -=. x -= y es equivalente a `x = x - y

	
a -= 5
a
Copy
	
5

Operador *=. x *= y es equivalente a `x = x * y

	
a *= 3
a
Copy
	
15

Operador /=. x /= y es equivalente a `x = x / y

	
a /= 3
a
Copy
	
5.0

Operador %=. x %= y es equivalente a `x = x % y

	
a = 25
a %= 2
a
Copy
	
1

Operador //=. x //= y es equivalente a `x = x // y

	
a = 25
a //= 2
a
Copy
	
12

Operador **=. x **= y es equivalente a `x = x ** y

	
a = 5
a **= 2
a
Copy
	
25

Operador &=. x &= y es equivalente a `x = x & y

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
a &= b; # 12 = 0000 1100
a
Copy
	
12

Operador |=. x |= y es equivalente a x = x | y

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
a |= b; # 61 = 0011 1101
a
Copy
	
61

Operador ^=. x ^= y es equivalente a `x = x ^ y

	
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
a ^= b; # 49 = 0011 0001
a
Copy
	
49

Operador >>=. x >>= y es equivalente a `x = x >> y

	
a = 60 # 60 = 0011 1100
a <<= 2; # 240 = 1111 0000
a
Copy
	
240

Operador <<=. x <<= y es equivalente a x = x << y

	
a = 60 # 60 = 0011 1100
a >>= 2; # 15 = 0000 1111
a
Copy
	
15

4. Control de flujolink image 52

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. Iflink image 53

Mediante if podemos crear condicionales

	
if len('MaximoFN') == 8:
print('MaximoFN tiene 8 caracteres')
Copy
	
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')
Copy
	
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')
Copy
	
MaximoFN tiene 8 caracteres

Si queremos escribir todo en una sola l铆nea

	
if len('MaximoFN') == 8: print('MaximoFN tiene 8 caracteres')
Copy
	
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')
Copy
	
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:
pass
else:
print('MaximoFN tiene 8 caracteres')
Copy
	
MaximoFN tiene 8 caracteres

4.2. Whilelink image 54

El bucle while se ejecuta mientras la condici贸n sea True

	
i = 0
string = 'MaximoFN'
while len(string) > i:
print(string[i], end='')
i += 1
Copy
	
MaximoFN

Si queremos que el bucle pare por alguna condici贸n usamos break

	
i = 0
string = 'MaximoFN'
while len(string) > i:
if string[i] == 'F':
break
print(string[i], end='')
i += 1
Copy
	
Maximo

Si queremos que una de las iteraciones no se ejecute por alguna raz贸n usamos continue

	
i = 0
string = 'Maximo FN'
while len(string) > i:
if string[i] == ' ':
i += 1
continue
print(string[i], end='')
i += 1
Copy
	
MaximoFN

Mediante else se puede ejecutar un bloque de c贸digo si la condici贸n del while no es True

	
i = 0
string = 'MaximoFN'
while len(string) > i:
print(string[i], end='')
i += 1
else:
print("\nSe ha terminado el while")
Copy
	
MaximoFN
Se ha terminado el while

4.3. Forlink image 55

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='')
Copy
	
MaximoFN
	
lista = ['M', 'a', 'x', 'i', 'm', 'o', 'F', 'N']
for x in lista:
print(x, end='')
Copy
	
MaximoFN
	
tupla = ('M', 'a', 'x', 'i', 'm', 'o', 'F', 'N')
for x in tupla:
print(x, end='')
Copy
	
MaximoFN
	
string = 'MaximoFN'
for i in range(len(string)):
print(string[i], end='')
Copy
	
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='')
Copy
	
MaximoFN

Tambi茅n se puede iterar por los sets, 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='')
Copy
	
NximoaMF

Si queremos que el bucle pare por alguna condici贸n usamos break

	
string = 'MaximoFN'
for x in string:
if x == 'F':
break
print(x, end='')
Copy
	
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 == ' ':
continue
print(x, end='')
Copy
	
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")
Copy
	
MaximoFN
Se 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:
pass
print('Interior del for no codificado')
Copy
	
Interior del for no codificado

5. Funcioneslink image 56

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')
Copy

Para llamar a la funci贸n solo es necesario escribir su nombre

	
funcion()
Copy
	
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")
Copy
	
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")
Copy
	
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")
Copy
	
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")
Copy
	
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")
Copy
	
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"])
Copy
	
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 string
print(funcion(["Blog", "de", "MaximoFN"]))
Copy
	
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, string2
dato0, dato1, dato2 = funcion(["Blog", "de", "MaximoFN"])
print(dato0 + ' ' + dato1 + ' ' + dato2)
Copy
	
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)
Copy
	
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():
pass
funcion()
Copy

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 1
else:
return n * factorial(n-1)
factorial(5)
Copy
	
120

5.1. Built in functionslink image 57

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)
Copy
	
5

A continuaci贸n se muestra una lista de estas funciones

	
import builtins
dir(builtins)
Copy
	
['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贸nlink image 58

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"
None
help(funcion)
Copy
	
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__
Copy
	
'Esta es la explicaci贸n de la funci贸n'

5.3. Decoradoreslink image 59

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 envoltorio
def funcion():
print("MaximoFN")
funcion_envoltorio = decorador(funcion)
print('Funci贸n sin decoradores: ')
funcion()
print('\nFunci贸n con decoradores: ')
funcion_envoltorio()
Copy
	
Funci贸n sin decoradores:
MaximoFN
Funci贸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
@decorador2
def funcion2():
print("MaximoFN")
print('Funci贸n con decoradores: ')
funcion2()
Copy
	
Funci贸n con decoradores:
==================
MaximoFN
==================

5.4. *args y **kwargslink image 60

*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. *argslink image 61

*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")
Copy
	
Hola, Alicia
Hola, Roberto
Hola, Carlos

5.4.2. **kwargslink image 62

**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)
Copy
	
Hola Juan, tu edad es 22 a帽os
Hola Maria, tu edad es 32 a帽os
Hola Pedro, tu edad es 25 a帽os

6. Funciones adicionaleslink image 63

6.1. Funciones lambdalink image 64

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 + 10
print(x(5))
Copy
	
15
	
x = lambda a, b, c : a + b + c
print(x(5, 6, 2))
Copy
	
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 * n
mydoubler = myfunc(2)
mytripler = myfunc(3)
print(f"mydoubler: {mydoubler(11)}")
print(f"mytripler: {mytripler(11)}")
Copy
	
mydoubler: 22
mytripler: 33

6.2. Funci贸n maplink image 65

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 + 1
lista_modificada = list(map(funcion_mas_1, lista))
lista_modificada
Copy
	
[2, 3, 4]

Esto es equivalente a usar list comprehension

	
lista_modificada = [funcion_mas_1(x) for x in lista]
lista_modificada
Copy
	
[2, 3, 4]

6.3. Funci贸n filterlink image 66

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 == 0
lista_filtrada = list(filter(esPar, lista))
lista_filtrada