Update Python Ofensivo
This commit is contained in:
parent
490afce41f
commit
e300dee83f
27
python-ofensivo/00_ejercicios/06_decoradores01.py
Normal file
27
python-ofensivo/00_ejercicios/06_decoradores01.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Decoradores
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def mi_decorador(funcion): # Función de orden superior
|
||||||
|
|
||||||
|
def envoltura(): # Función anidada
|
||||||
|
|
||||||
|
print("Esto se añade antes del función desde la envoltura")
|
||||||
|
funcion() # Llamada a la función original
|
||||||
|
print("Esto se añade después del función desde la envoltura")
|
||||||
|
|
||||||
|
return envoltura
|
||||||
|
|
||||||
|
|
||||||
|
@mi_decorador
|
||||||
|
def saludo():
|
||||||
|
|
||||||
|
print("Hola, estoy saludando dentro de la función")
|
||||||
|
|
||||||
|
|
||||||
|
saludo()
|
||||||
|
|
||||||
|
@property # Getters y Setters
|
||||||
|
|
33
python-ofensivo/00_ejercicios/06_decoradores02.py
Normal file
33
python-ofensivo/00_ejercicios/06_decoradores02.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Decoradores
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
class Persona:
|
||||||
|
|
||||||
|
def __init__(self, nombre, edad):
|
||||||
|
|
||||||
|
self._nombre = nombre # Atributo protegido
|
||||||
|
self._edad = edad # Atributo protegido
|
||||||
|
|
||||||
|
@property # Getter
|
||||||
|
def edad(self): # Creando Getter
|
||||||
|
|
||||||
|
return self._edad
|
||||||
|
|
||||||
|
@edad.setter # Setter
|
||||||
|
def edad(self, valor): # Creando Setter
|
||||||
|
|
||||||
|
if valor <= 0:
|
||||||
|
raise ValueError("[!] La edad no puede ser cero o un numero negativo")
|
||||||
|
|
||||||
|
self._edad = valor
|
||||||
|
|
||||||
|
|
||||||
|
# manolo._edad = 36 # Setter MAL HECHO
|
||||||
|
# NO SE DEBE ASIGNAR VALOR DIRECTAMENTE A UN ATRIBUTO PROTEGIDO
|
||||||
|
|
||||||
|
manolo = Persona("Manolo", 35)
|
||||||
|
manolo.edad = 1 # Setter
|
||||||
|
print(manolo.edad) # Getter
|
29
python-ofensivo/00_ejercicios/06_decoradores03.py
Normal file
29
python-ofensivo/00_ejercicios/06_decoradores03.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Decoradores
|
||||||
|
"""
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
def cronometro(funcion):
|
||||||
|
def envoltura(n): # Si la función recibe parámetros se deben pasar a la envoltura
|
||||||
|
inicio = time.time()
|
||||||
|
funcion(n) # Si la función recibe parámetros se deben pasar a la función
|
||||||
|
final = time.time()
|
||||||
|
|
||||||
|
print(f"""Tiempo de ejecución de la función {funcion.__name__}:
|
||||||
|
{round(final - inicio, 5)} segundos""")
|
||||||
|
|
||||||
|
return envoltura
|
||||||
|
|
||||||
|
@cronometro
|
||||||
|
def pausa_corta(num):
|
||||||
|
time.sleep(num)
|
||||||
|
|
||||||
|
@cronometro
|
||||||
|
def pausa_larga(num):
|
||||||
|
time.sleep(num)
|
||||||
|
|
||||||
|
|
||||||
|
pausa_corta(2)
|
||||||
|
pausa_larga(3)
|
31
python-ofensivo/00_ejercicios/06_decoradores04.py
Normal file
31
python-ofensivo/00_ejercicios/06_decoradores04.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
*args: argumentos posicionales
|
||||||
|
|
||||||
|
**kwargs: argumentos nombrados
|
||||||
|
"""
|
||||||
|
|
||||||
|
# EJEMPLO DE *args
|
||||||
|
|
||||||
|
|
||||||
|
def suma(*args):
|
||||||
|
|
||||||
|
return sum(args)
|
||||||
|
|
||||||
|
|
||||||
|
# EJEMPLO DE **kwargs
|
||||||
|
|
||||||
|
def presentacion(**kwargs):
|
||||||
|
|
||||||
|
print("[+] Mis datos:")
|
||||||
|
for key, value in kwargs.items():
|
||||||
|
|
||||||
|
print(f"\t- {key}: {value}")
|
||||||
|
|
||||||
|
|
||||||
|
presentacion(
|
||||||
|
nombre="Juan",
|
||||||
|
edad=20,
|
||||||
|
ciudad="Medellín",
|
||||||
|
profesion="Lammer"
|
||||||
|
)
|
39
python-ofensivo/00_ejercicios/06_decoradores05.py
Normal file
39
python-ofensivo/00_ejercicios/06_decoradores05.py
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
args: argumentos posicionales
|
||||||
|
kwargs: argumentos clave
|
||||||
|
"""
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def cronometro(funcion):
|
||||||
|
def envoltura(*args, **kwargs):
|
||||||
|
inicio = time.time()
|
||||||
|
funcion()
|
||||||
|
final = time.time()
|
||||||
|
|
||||||
|
print(f"""Tiempo de ejecución de la función {funcion.__name__}:
|
||||||
|
{round(final - inicio, 5)} segundos""")
|
||||||
|
|
||||||
|
if args:
|
||||||
|
print(f"Argumentos: {args}")
|
||||||
|
|
||||||
|
if kwargs:
|
||||||
|
print(f"Argumentos clave: {kwargs}")
|
||||||
|
|
||||||
|
return envoltura
|
||||||
|
|
||||||
|
|
||||||
|
@cronometro
|
||||||
|
def pausa_corta(*args, **kwargs):
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
|
||||||
|
@cronometro
|
||||||
|
def pausa_larga(*args, **kwargs):
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
|
||||||
|
pausa_corta(2, 3, 4, 5, 6, 7, nombre="Juan", edad=23)
|
||||||
|
pausa_larga()
|
51
python-ofensivo/00_ejercicios/06_decoradores06.py
Normal file
51
python-ofensivo/00_ejercicios/06_decoradores06.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Decoradores
|
||||||
|
"""
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
|
PI = math.pi
|
||||||
|
|
||||||
|
|
||||||
|
class Circunferencia:
|
||||||
|
|
||||||
|
def __init__(self, radio):
|
||||||
|
self._radio = radio # _radio es un atributo protegido
|
||||||
|
|
||||||
|
@property # Getter
|
||||||
|
def radio(self):
|
||||||
|
|
||||||
|
return self._radio
|
||||||
|
|
||||||
|
@property
|
||||||
|
def diametro(self):
|
||||||
|
|
||||||
|
return self._radio * 2
|
||||||
|
|
||||||
|
@property
|
||||||
|
def area(self):
|
||||||
|
|
||||||
|
return round(self._radio**2 * PI, 2)
|
||||||
|
|
||||||
|
@radio.setter # Setter
|
||||||
|
def radio(self, radio):
|
||||||
|
|
||||||
|
if radio >= 0:
|
||||||
|
self._radio = radio
|
||||||
|
else:
|
||||||
|
raise ValueError("El radio no puede ser negativo")
|
||||||
|
|
||||||
|
|
||||||
|
c = Circunferencia(5)
|
||||||
|
|
||||||
|
print(f"[+] El radio es de {c.radio} cm")
|
||||||
|
print(f"[+] El diametro es de {c.diametro} cm")
|
||||||
|
print(f"[+] El area es de {c.area} cm^2")
|
||||||
|
|
||||||
|
print()
|
||||||
|
|
||||||
|
c.radio = 10
|
||||||
|
print(f"[+] El radio es de {c.radio} cm")
|
||||||
|
print(f"[+] El diametro es de {c.diametro} cm")
|
||||||
|
print(f"[+] El area es de {c.area} cm^2")
|
Loading…
Reference in New Issue
Block a user