Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Comprehensions, Funciones y
Manejo de Errores
Start Lesson @January 25, 2023 4:51 PM
End Lesson
Status In Progress
Type curso
1. El Zen de Python
2. Sets
3. Modificando conjuntos
4. Operaciones con conjuntos
Comprehensions
5. List Comprehension
6. Dictionary Comprehension
7. Dictionary Comprehension: condition
8. Lists vs. Tuples vs. Sets
FUNCIONES
9. Funciones
10. Funciones: return
11. Parámetros por defecto y múltiples returns
12. El scope
13. Refactor game
14.Funciones anónimas: lambda
15. Higher order function: una función dentro de otra función
Propiedades de HOF
16. Map
Sintaxis.
17. Map con diccionarios
18. Reto: map con inmutabilidad
19. Filter
1. El Zen de Python
The Zen of Python, by Tim Peters
7. La legibilidad es importante.
8. Los casos especiales no son lo suficientemente especiales como para romper las
reglas.
14. A pesar de que esa manera no sea obvia al principio, al menos que seas holandés.15
2. Sets
Se pueden modificar
No tienen un orden
# puede ser mixto. El set se ordena solo, lo importante es lo que tengo dentro.
set_types = {1, 'hola',False, 12.12}
print(set_types) # {False, 1, 12.12, 'hola'}
3. Modificando conjuntos
Funciones de set:
pop(): Nos devuelve un elemento aleatorio y lo elimina y si el conjunto está vacío lanza el
error “key error”.
NOTA: No se pueden realizar operaciones con otras colecciones de datos, solo se puede
únicamente entre conjuntos.
Comprehensions
5. List Comprehension
Comprensión de lista:
Es una lista que tiene por contenido una operación en vez de una lista de conjuntos, y
estas operaciones se realizan con un for para poder iterar y sacar los datos de la lista, y
esta lista tiene la siguiente forma:
#HABITUAL
numbers = []
for i in range(1, 11):
if i % 2 == 0:
numbers.append(i * 2)
print(numbers)
#lists comprehension
numbers_v2 = [i * 2 for i in range(1, 11) if i % 2 == 0]
print(numbers)
### EJEMPLO
days = ["lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"]
newlist = []
for i in days:
if "a" in i:
newlist.append(i)
## LISTS COMPRENHESION
days = ["lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"]
6. Dictionary Comprehension
Dict comprehensions
En este ejemplo hemos hecho referencia a una única lista, pero no tiene por qué ser así:
Obsérvese que, en este caso, también se está simulando el mismo bucle for anidado que
ya hemos visto:
d = {}
forc in cities:
fory in years:
d.update({c:y})
d
Solo subsisten cuatro parejas clave-valor (en lugar de 16) pues ya sabemos que en un
diccionario no puede haber claves repetidas, por lo que para cada valor c se recorren
todos los años en la variable “y” y se va sobrescribiendo el valor que pueda existir para la
clave c.
import random
countries = ['col', 'mex', 'bol', 'pe']
9. Funciones
Una función es un grupo de declaraciones relacionadas que realizan una tarea específica.
Las funciones ayudan a dividir nuestro programa en partes más pequeñas y modulares. A
medida que nuestro programa crece más y más, las funciones lo hacen más organizado y
manejable.
deffunction_name(parameters):
"""docstring"""
statement(s)
def my_print(text):
print(text * 2)
my_print('Este es mi texto')
my_print('Hola')
a = 10
b = 90
c = a + b
suma(1 ,5)
suma(10 ,4)
12. El scope
Dentro de una función puede haber variables, las cuales se llaman
variables locales
. Estas variables locales, se identifican porque están escritas dentro de la definición de la
función; y únicamente funcionan mientras que la función sea llamada o utilizada. Si vas a
llamar a una variable local por fuera de la función, no servirá.
Y existen
variables globales
que son las que están escritas fuera de una función. Estas variables si funcionan al ser
llamadas sin la función, porque no están determinadas dentro de la función.
def increment():
price = 200
result = price + 10
print(result)
return result
print(price)
price_2 = increment()
print(price_2)
price(result)
def choose_options():
options = ('piedra', 'papel', 'tijera')
user_option = input('piedra, papel o tijera => ')
user_option = user_option.lower()
computer_option = random.choice(options)
def run_game():
computer_wins = 0
user_wins = 0
rounds = 1
while True:
print('*' * 10)
print('ROUND', rounds)
print('*' * 10)
print('computer_wins', computer_wins)
print('user_wins', user_wins)
rounds += 1
if user_wins == 2:
print('El ganador es el usuario')
break
run_game()
Una función de Orden Superior o en sus siglas HOF se le lama así solo cuando contiene
otras funciones como parámetro de entrada o devuelve una función como salida, es decir
que en este caso las funciones que operan a otras funciones se les denomina Higher order
function.
También hay que entender que a estas Funciones de Orden Superior HOF se aplican para
funciones y métodos que toman como funciones a los parámetros o devuelven una función
como un resultado.
Propiedades de HOF
Una función es una instancia de tipo objeto.
def increment(x):
return x + 10
increment_v2 = lambda x: x + 10
_Produccion_
50
def increment(x):
return x + 10
increment_v2 = lambda x: x + 10
_Producción:_
50
80
Material de apoyo
Sintaxis.
map(function, iterables)
Con esto vamos hacer unos deliciosos tacos, para ello utilizáremos maps()
def ingredientes(a,b):
return a + " es a " + b
print(list(menu))
_Producción_
['carne es a molida', 'maiz es a tacos', 'aguacate es a guacamole']
Se puede acceder a los valores utilizando las claves asociadas a ellos en lugar de los
índices numéricos típicos de otras estructuras de datos.
Map también se conoce como “diccionario” en Python y se denota con llaves {}.
items = [
{
'product':'camisa',
'price':100
},
{
'product':'pantalon',
'price':300
},
{
'product':'vestido',
'price':150
},
{
'product':'chaqueta',
'price':400
}
]
print('Old list')
print(items)
--> Oldlist
[{'product': 'camisa', 'price': 100},
{'product': 'pantalon', 'price': 300},
{'product': 'vestido', 'price': 150},
{'product': 'chaqueta', 'price': 400}]
19. Filter
La función filter(), devuelve un valor que esta siendo iterado de la cual su resultado será el
valor que se esta buscando en el filter
SINTAXIS
Valores.
Ejercicio:
Tenemos una lista de estudiantes de la cual debemos saber quienes son de Colombia y
quienes son considerados mayores de edad al tener igual o mas de 18 años y cuantos son.
people = [
{
'name' : 'Pedro',
'country': 'Colombia',
'age' : 18,
'course' : 'developer'
},
{
'name' : 'Juan',
'country': 'Perú',
'age' : 17,
'course' : 'UX'
},
{
'name' : 'Carlos',
'country': 'Chile',
'age' : 31,
'course' : 'Diseño'
},
{
'name' : 'Ana Maria',
'country': 'Colombia',
'age' : 25,
'course' : 'Tester'
}
]
Ahora planteamos el primer problema a resolver, cuales son los estudiantes de Colombia
y cuantos son:
Ahora necesitamos saber quienes son considerados mayores de edad al tener 18 años o
más.
Con esto podemos saber que hay 3 estudiantes que son considerados
mayores de edad al tener 18 años o más quienes serían: Pedro con 18
años, carlos, con 31 años y Ana Maria con 25 años.
20.Reduce
La función reduce()
reduce() es una función incorporada de Python 2, que toma como argumento un conjunto de
valores (una lista, una tupla, o cualquier objeto iterable) y lo “reduce” a un único valor. Cómo
se obtiene ese único valor a partir de la colección pasada como argumento dependerá de la
función aplicada.
Por ejemplo, el siguiente código reduce la lista [1, 2, 3, 4] al número 10 aplicando la función
accum(counter, item), que retorna la suma de sus argumentos.
<
defaccum(counter, item):
return counter + item
La función pasada como primer argumento debe tener dos parámetros. reduce() se
encargará de llamarla de forma acumulativa (es decir, preservando el resultado de llamadas
anteriores) de izquierda a derecha. De modo que el código anterior es similar a:
<
print(accum(accum(accum(1, 2), 3), 4))
>
21. Módulos
Un modulo se puede definir que es lo mismo a una biblioteca de código. Es decir es un
archivo que contiene un conjunto de funciones que se pueden aplicar.
3. Abrimos el archivo con el cual vamos a trabajar y declaramos el modulo que le dimos el
nombre por ejemplo con la extensión import, sería de la siguiente manera: import name
defgreeting(name):
print("Hello, " + name)
importmodulemodule.greeting("Camilo")
Producción:Hello, Camilo
_ module .py_
people = {
"name": "Camilo",
"age": 35,
"country": "Colombia"
}
exercise_module .py
import module
a = module.people["age"]
print(a)
Producción: 35
defgreeting(name):
print("Hello, " + name)
people1 = {
"name": "Camilo",
"age": 35,
"country": "Colombia"
}
exercise_module.py
print (people1["age"])
Producción: 35
# utils.py
defget_population():
keys = ['col','bol']
values = [300,400]
return keys,values
defpopulation_by_country(data, country):
result = list(filter(lambda item: item['Country'] == country,data))
return result
# main.py
import utils
keys,values = utils.get_population()
print(keys,values) # ['col','bol'] [300,400]
data = [{
'Country': 'Colombia',
'Population': 500
},
{
'Country': 'Bolivia',
'Population': 300
}
]
print(utils.A)
Tenemos un módulo que tiene los datos de la población de 3 paises de Sur America, los
cualse vamos a crear en la carpeta app y daremos por nombre utils.py
def get_population():
keys = ['Colombia', 'Peru', 'Argentina']
values = [500, 250, 350]
return keys, values
Ahora creamos el archivo con nombre main.py , este archivo vamos a digitar los datos a
buscar.
import utils
keys,values = utils.get_population()
print(keys,values)
data = [
{
'country': 'Colombia',
'Population': 500
},
{
'country': 'Peru',
'Population': 250
},
{
'country': 'Argentina',
'Population': 350
}
]
Producción:
Para ello debemos tener en cuenta que su uso esta catalogado de dos maneras:
Para Python, es independiente cual de las dos formas estemos utilizando el código, ya que
python define una variable especial llamada __name__ la cual contiene un string y cuyo
resultado dependerá de la forma en como sea usada.
import utils
data = [
{
'country': 'Colombia',
'Population': 500
},
{
'country': 'Peru',
'Population': 250
},
{
'country': 'Argentina',
'Population': 350
}
]
def run():
keys, values = utils.get_population()
print(keys, values)
if __name__ == '__main__':
run()
Producción:
Con esto podemos concluir que la función __name__ == '__main__' ayuda a que python
identifique de que manera se debe ejecutar e o los módulos ó script.Material de apoyo
24. Paquetes
Los paquetes son las carpetas que contienen varios módulos y cada uno con una función
distinta.
Para ello debe tener siempre un archivo de nombre __init__.py (por lo general esta vacio, ya
que así es compatible con programas python versiones anteriores a la 3), con esto le
estamos indicado a python que esto se trata de un paquete y no de una carpeta.
puede contener información la cual se ejecutara siempre, para este caso le colocamos el
titulo Bienvenido a la clase de Aritmetica.
aritmetica.py va a contener nuestras operaciones aritmeticas que son, suma, resta,
multiplicacion y division:
defsumar(a, b):
returna +bdefrestar(a, b):
import pkg.aritmetica
print(pkg.aritmetica.sumar(5,7))
print(pkg.aritmetica.restar(5,7))
Produccion:
Produccion:
Produccion:
25. Iterables
Un iterable se define como el objeto que contiene un número contable con valores y este al
tener un valor puede recorrer uno a uno los elementos que la contienen como una estructura
de datos y operar con ellos, pero a la vez se rigen bajo la instrucción que se le es dada, con
lo cual son dependientes de la instrucción a recibir.
Veamos un ejemplo:
Tenemos una serie de frutas las cuales debemos recorrer una a una
para saber cuales son las que están dentro de la lista.
print(next(myit))
print(next(myit))
print(next(myit))
Ahora vamos a imprimir el resultado una a una con print(next(myit)) , con esto controlamos
un iterador por print
print(next(myit))
_Producción:_
manzana
print(next(myit))
print(next(myit))
_Producción:_
manzana
pera
También podemos utilizar los iterables como una cadena de texto que recorre un texto o una
serie de números.
fruit = ("manzana")
myit =iter(fruit)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
_Producción:_manzana
Otra forma de realizar un iterador es atraves de for() o un bucle, para ello realizaremos el
siguiente ejemplo:
_Produccion:_
chevrolet
volvo
audi
mazda
Con el iterador también podemos crear una secuencia de números hasta cierto valor que le
determinemos.
def__next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
_Producción:_
1
2
3
4
5
classMyNumbers:
def__iter__(self):
self.a = 1
return self
def__next__(self):
if self.a <= 10:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass = MyNumbers()
myiter = iter(myclass)
# error de sintaxis
print(0/0))
--> SyntaxError: unmatched ')'
by
zero
#variable no declarada
print(result)
--> NameError: name 'result'
is
not
defined
if
Exception Description
Abrir un archivo de texto inexistente o que se encuentra bloqueado por otra aplicación.
f =open('./text.txt')
print(f.read())
_Producción:_
linea 1
lina 2
linea3
linea 4
asj
hjdc
judfnvkdjnv
zujcb
f =open('./text.txt')
print(f.readline())
_Producción:_
linea 1
for lin f:
print(l)
f.close()
_Producción:_
linea 1
lina 2
linea3
linea 4
asj
hjdc
judfnvkdjnv
zujcb
with
open('./text.txt', 'r+')
as
file:
# leer archivo
for
line
in
file:
print(line)
# leer archivo
with
open('./text.txt', 'w+')
as
file:
# leer archivo
for
line
in
file:
print(line)
csv
read_csv
(path):
with
open(path, 'r')
as
csvfile:
reader = csv.reader(csvfile, delimiter=',')
data = []
for
row
in
reader:
iterable =zip(header, row) # une los valores de la listas en tuplas
country_dict = {key:value
for
key, value
in
iterable}
data.append(country_dict)
print(country_dict)
data
if
__name__ == '__main__':
data = read_csv('./app/data.csv')
print(data)
Un archivo CSV es un tipo de archivo que se utiliza para almacenar datos en una forma
tabular estructurada (fila / columna). Es un archivo de texto plano y, como su nombre lo
indica, almacena los valores separados por una coma.
En este artículo, tendremos una discusión detallada sobre cómo leer, escribir y analizar
un archivo CSV en Python.
Los diferentes lenguajes usan diferentes formatos para almacenar datos, por lo que
cuando los programadores necesitan exportar datos de un programa a otro, sienten la
necesidad de tener algún tipo de archivo universal con el cual transferir grandes
cantidades de datos; Un tipo de archivo que cualquier programa puede leer y analizar en
su propio formato.