Decorator ও Generator

🧠 Python Functional Programming: Decorator ও Generator

Python Functional Programming এমন একটি প্রোগ্রামিং স্টাইল যেখানে function কে first-class citizen হিসেবে ব্যবহার করা হয়। এই অধ্যায়ে আমরা দুটি অত্যন্ত গুরুত্বপূর্ণ বিষয় শিখবো:

  • Decorator – ফাংশনের আচরণ পরিবর্তন করতে
  • Generator – memory efficient iteration করতে

🔹 Decorator কী?

Decorator হলো এমন একটি ফাংশন যা অন্য একটি ফাংশনকে ইনপুট হিসেবে নেয় এবং তার আচরণ (behavior) পরিবর্তন করে। Decorator সাধারণত @ চিহ্ন দিয়ে ব্যবহার করা হয়।

📌 Simple Decorator Example

def my_decorator(func):
    def wrapper():
        print("Function শুরু হচ্ছে")
        func()
        print("Function শেষ হয়েছে")
    return wrapper

@my_decorator
def say_hello():
    print("Hello Python")

say_hello()

# Output:
# Function শুরু হচ্ছে
# Hello Python
# Function শেষ হয়েছে
  

এখানে say_hello() ফাংশনের আগে ও পরে অতিরিক্ত কোড যুক্ত হয়েছে, কিন্তু মূল ফাংশনের কোড পরিবর্তন করতে হয়নি।

📌 Decorator with Arguments

def auth_required(func):
    def wrapper(user):
        if user == "admin":
            func(user)
        else:
            print("Access Denied")
    return wrapper

@auth_required
def dashboard(user):
    print("Welcome to dashboard")

dashboard("admin")
dashboard("guest")

# Output:
# Welcome to dashboard
# Access Denied
  

এই ধরনের Decorator বাস্তবে authentication, logging, timing ইত্যাদির জন্য ব্যবহার হয়।

🔹 Generator কী?

Generator হলো এমন একটি ফাংশন যা একবারে সব ডাটা রিটার্ন না করে, একটি করে value yield করে। এটি memory-efficient এবং বড় ডাটার জন্য অত্যন্ত উপকারী।

📌 Normal Function vs Generator

# Normal Function
def normal_func():
    return [1, 2, 3, 4]

# Generator Function
def generator_func():
    yield 1
    yield 2
    yield 3
    yield 4

print(normal_func())
print(list(generator_func()))

# Output:
# [1, 2, 3, 4]
# [1, 2, 3, 4]
  

পার্থক্য হলো Generator সব ডাটা একসাথে memory তে লোড করে না।

📌 Generator with Loop

def count_up(n):
    i = 1
    while i <= n:
        yield i
        i += 1

for num in count_up(5):
    print(num)

# Output:
# 1
# 2
# 3
# 4
# 5
  

Generator iteration চলাকালীন প্রয়োজন অনুযায়ী value তৈরি করে।

💡 বাস্তব জীবনে ব্যবহার

  • Decorator → Authentication, Logging, Caching
  • Generator → Large File Read, API Pagination, Streaming Data

✅ সংক্ষেপে

  • Decorator ফাংশনের আচরণ পরিবর্তন করে
  • Generator memory-efficient iteration দেয়
  • Functional Programming এ দুটোই অত্যন্ত গুরুত্বপূর্ণ
👼 Quiz
/

লোড হচ্ছে...

Interview Questions:

1. Decorator কী?

ফাংশনের আচরণ পরিবর্তন করে।

2. Generator কী?

yield ব্যবহার করে data generate করে।

3. Generator এর সুবিধা কী?

Memory efficient।