Skip to content

Commit d801b06

Browse files
authored
Merge pull request mouredev#4666 from avcenal/main
#24 - Python
2 parents a8c5cb1 + 5c9a682 commit d801b06

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
"""
2+
* EJERCICIO:
3+
* Explora el concepto de "decorador" y muestra cómo crearlo
4+
* con un ejemplo genérico.
5+
"""
6+
7+
from functools import reduce
8+
9+
def decorador(funcion):
10+
def nueva_funcion(*args):
11+
print("Se va a llamar")
12+
c = funcion(*args)
13+
print("Se ha llamado")
14+
return c
15+
return nueva_funcion
16+
17+
#@decorador
18+
def suma (*args:int):
19+
print("Entra en suma")
20+
return reduce(lambda x,y:x+y,[*args])
21+
22+
#print(f"El resultado de la suma es: {suma (7,9,3,1,2)}")
23+
24+
@decorador
25+
def resta(*args:int):
26+
print("Entra en la resta")
27+
return reduce(lambda x,y:x-y,[*args])
28+
29+
print(f"El resultado de la resta es: {resta(7,3)}")
30+
31+
funcion_decorada = decorador(suma)
32+
funcion_decorada(3,5,7)
33+
34+
"""DIFICULTAD EXTRA (opcional):
35+
* Crea un decorador que sea capaz de contabilizar cuántas veces
36+
* se ha llamado a una función y aplícalo a una función de tu elección.
37+
"""
38+
def count_decorator(function):
39+
def original_function(*args:int):
40+
original_function.count += 1
41+
print(f"La función {function.__name__} se ha llamado {original_function.count} vez/veces")
42+
return function(*args)
43+
44+
original_function.count = 0 #es una variable que declaro para la función original_function llamada count
45+
return original_function
46+
#el decorador es capaz de diferenciar entre funciones a las que llama
47+
#genera un ámbito de ejecución para la misma función que se ejecuta
48+
#la instancia de "multiplicar" es diferente de otras funciones como "suma_2"
49+
50+
@count_decorator
51+
def multiplicar(*args:int):
52+
return reduce(lambda x,y: x*y,[*args])
53+
54+
@count_decorator
55+
def suma_2(*args:int):
56+
return reduce(lambda x,y: x+y,[*args])
57+
58+
print(multiplicar(3,2))
59+
print(multiplicar(4,2))
60+
print(multiplicar(5,2))
61+
print(suma_2(3,8))
62+
print(suma_2(9,1,5))

0 commit comments

Comments
 (0)