Advertisement
Lyuben_Andreev

Decorators

Aug 18th, 2024
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.01 KB | Source Code | 0 0
  1. import time
  2. import json
  3.  
  4.  
  5. # Таск 1: Функция за намиране на всички прости числа в даден диапазон
  6. def find_primes(start, end):
  7.     primes = []
  8.     for num in range(start, end + 1):
  9.         if num > 1:
  10.             for i in range(2, int(num ** 0.5) + 1):
  11.                 if num % i == 0:
  12.                     break
  13.             else:
  14.                 primes.append(num)
  15.     return primes
  16.  
  17.  
  18. # Таск 1: Декоратор за измерване на времето за изпълнение на функцията
  19. def time_it(func):
  20.     def wrapper(*args, **kwargs):
  21.         start_time = time.time()  # Започване на измерването на времето
  22.         result = func(*args, **kwargs)
  23.         end_time = time.time()  # Завършване на измерването на времето
  24.         elapsed_time = end_time - start_time
  25.         print(f"Time taken: {elapsed_time:.2f} seconds")
  26.         return result
  27.  
  28.     return wrapper
  29.  
  30.  
  31. @time_it
  32. def get_primes_in_range(start, end):
  33.     return find_primes(start, end)
  34.  
  35.  
  36. # Таск 2: Разширена функция за намиране на всички прости числа в даден диапазон
  37. def main(start=0, end=1000):
  38.     primes = get_primes_in_range(start, end)
  39.     print(f"Prime numbers from {start} to {end}:")
  40.     for prime in primes:
  41.         print(prime)  # Принтиране на всяко просто число на нов ред
  42.  
  43.  
  44. # Таск 3: Декоратор за форматиране на отчетите в различни формати
  45. def format_report(format_type):
  46.     def decorator(func):
  47.         def wrapper(*args, **kwargs):
  48.             data = func(*args, **kwargs)
  49.             if format_type == 'CSV':
  50.                 formatted = ','.join(map(str, data))
  51.             elif format_type == 'JSON':
  52.                 formatted = json.dumps(data)
  53.             elif format_type == 'TXT':
  54.                 formatted = '\n'.join(map(str, data))
  55.             else:
  56.                 formatted = str(data)
  57.             print(f"Formatted report ({format_type}):\n{formatted}")
  58.             return data
  59.  
  60.         return wrapper
  61.  
  62.     return decorator
  63.  
  64.  
  65. # Примерна функция за генериране на отчетни данни
  66. @format_report('CSV')
  67. def generate_report(data):
  68.     return data
  69.  
  70.  
  71. # Таск 3: Основна функция за демонстриране на използването на декоратор за отчет
  72. def report_demo():
  73.     data = [1000, 2000, 3000, 4000]
  74.     generate_report(data)
  75.  
  76.  
  77. def run():
  78.     # Таск 2: Демонстриране на намиране на прости числа в диапазона 0-1000
  79.     main(0, 1000)
  80.  
  81.     # Таск 3: Демонстриране на форматиране на отчет в CSV формат
  82.     report_demo()
  83.  
  84.  
  85. # Извикване на функцията run() за изпълнение на всички задачи
  86. run()
  87.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement