Advertisement
teslariu

funciones decoradas

Sep 5th, 2023
1,047
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.87 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. #
  4. # Funciones: devuelven valores basados en argumentos
  5. """
  6. def sumar(n):
  7.     return n + 1
  8.    
  9. print(sumar(3))
  10.  
  11. # LAS FUNCIONES SON INSTANCIAS OBJETOS DE PRIMERA CLASE
  12. def diga_hola(nombre):
  13.     return f"Hola {nombre}"
  14.    
  15. def es_maravilloso(nombre):
  16.     return f"{nombre} es maravilloso"
  17.    
  18. def saludar_a_juan(funcion):  # se pasa la referencia a la funcion
  19.     return funcion("Juan")
  20.    
  21. print(saludar_a_juan(diga_hola))
  22. print(saludar_a_juan(es_maravilloso))
  23.  
  24.  
  25. # funciones internas: son funciones dentro de otras funciones
  26. def padre():
  27.     print("Dentro de la función padre")
  28.    
  29.     def primer_hijo():
  30.         print("Dentro del primer hijo")
  31.  
  32.     def segundo_hijo():
  33.         print("Dentro del segundo hijo")
  34.        
  35.     segundo_hijo()
  36.     primer_hijo()
  37.    
  38.    
  39. padre()  # imprime padre, segundo hijo, primer hijo
  40.  
  41. # esto da error: llamar a func. internas desde afuera
  42. # primer_hijo()
  43.  
  44.  
  45. # devolviendo funciones internas
  46. def padre(numero):
  47.        
  48.     def primer_hijo():
  49.         print("Hola, soy Ana, la primera hija")
  50.  
  51.     def segundo_hijo():
  52.         print("Hola, soy Hugo, el segundo hijo")
  53.        
  54.     if numero == 1:
  55.         return primer_hijo
  56.     else:
  57.         return segundo_hijo
  58.  
  59.  
  60. primero = padre(1)
  61. print(primero())  
  62.  
  63.  
  64.  
  65.  
  66. # decorador simple
  67. def mi_decorador(funcion):
  68.     def wrapper():
  69.         print("antes de llamar a la función")
  70.         funcion()
  71.         print("despues de llamar a la función")
  72.    
  73.     return wrapper
  74.    
  75. def diga_whisky():
  76.     print("whisky")
  77.    
  78. diga_whisky = mi_decorador(diga_whisky)
  79. diga_whisky()
  80.  
  81.  
  82. from datetime import datetime
  83.  
  84. def solo_de_dia(funcion):
  85.     def wrapper():
  86.         if 7 <= datetime.now().hour < 21:
  87.             funcion()
  88.         else:
  89.             pass
  90.    
  91.     return wrapper
  92.    
  93. # Decorador sin @  
  94. #def gritar():
  95. #   print("AAAAAAAHHHHHHHHH")
  96.  
  97. #gritar = solo_de_dia(gritar)
  98. #gritar()          
  99.  
  100.  
  101. ##### Decorador con @
  102. @solo_de_dia
  103. def gritar():
  104.     print("AAAAAAAHHHHHHHHH")
  105.    
  106. gritar()
  107.  
  108.  
  109. # reuso de decoradores para funciones sin argumentos
  110. from decoradores import duplicar_borrador
  111.  
  112. @duplicar_borrador
  113. def diga_hola():
  114.     print("Hola")
  115.  
  116. diga_hola()
  117.  
  118.  
  119. # decorando funciones con argumentos
  120. from decoradores import duplicar
  121.  
  122. @duplicar
  123. def diga_hola(nombre):
  124.     print(f"Hola {nombre}")
  125.    
  126. diga_hola("Juan")
  127.  
  128.  
  129.  
  130.  
  131.  
  132. @debug
  133. def saludar(nombre, edad=None):
  134.     if edad is None:
  135.         return f"Hola bebé {nombre}"
  136.     else:
  137.         return f"Hola {nombre}, usted tiene {edad} años"
  138.        
  139. print("Debugging...")
  140. saludar("Benjamín")
  141. saludar("Ricardo", 44)
  142.  
  143. """
  144. from decoradores import debug, timer
  145.  
  146. class PierdeTiempo:
  147.     @debug
  148.     def __init__(self, maximo):
  149.         self.maximo = maximo
  150.        
  151.     @timer
  152.     def perder_tiempo(self, veces):
  153.         for _ in range(veces):
  154.             sum([i**2 for i in range(self.maximo)])
  155.            
  156. print("pierde tiempo")
  157. demora = PierdeTiempo(1000)
  158. demora.perder_tiempo(999)
  159.            
  160. @timer
  161. def dormir():
  162.     import time
  163.     time.sleep(10)
  164.     return 0
  165.  
  166. dormir()
  167.  
  168.  
  169.  
  170.  
  171.    
  172.    
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.        
  180.        
  181.        
  182.        
  183.        
  184.        
  185.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement