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