ডেকোরেটর এবং জেনারেটর

ফাংশন - পাইথন প্রোগ্রামিং (Python Programming) - Computer Programming

453

ডেকোরেটর (Decorator) এবং জেনারেটর (Generator) পাইথনের দুটি শক্তিশালী ফিচার, যা কোডকে আরও কার্যকর, মডুলার এবং পুনঃব্যবহারযোগ্য করতে সাহায্য করে।


ডেকোরেটর (Decorator)

ডেকোরেটর হলো পাইথনের ফাংশনের এক ধরণের বিশেষ ফাংশন, যা অন্য একটি ফাংশনের কার্যকারিতা পরিবর্তন বা সম্প্রসারিত করতে ব্যবহৃত হয়। ডেকোরেটর মূলত একটি ফাংশনকে "ডেকোরেট" করে, অর্থাৎ ফাংশনের ভেতরে নতুন ফিচার যোগ করে দেয়, যা আসল ফাংশনের কার্যকারিতাকে পরিবর্তন না করেও এর আউটপুট বা ফলাফল প্রভাবিত করে।

ডেকোরেটরের সাধারণ গঠন:

def decorator_function(original_function):
    def wrapper_function():
        # কিছু কাজ করতে পারেন
        original_function()
        # আরও কিছু কাজ করতে পারেন
    return wrapper_function

ডেকোরেটর প্রয়োগ: ডেকোরেটর ব্যবহার করতে ফাংশনের উপরে @decorator_name লেখা হয়। এটি প্রায়শই @ চিহ্ন ব্যবহার করে এক লাইনে সংক্ষেপে লেখা হয়।

উদাহরণ:

ধরা যাক, আমাদের একটি ডেকোরেটর তৈরি করতে হবে, যা যেকোনো ফাংশনের আগে এবং পরে একটি মেসেজ প্রিন্ট করবে।

def my_decorator(func):
    def wrapper():
        print("Function is about to execute.")
        func()
        print("Function has executed.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello, World!")

say_hello()

আউটপুট:

Function is about to execute.
Hello, World!
Function has executed.

ব্যাখ্যা:

  • এখানে my_decorator একটি ডেকোরেটর, যা say_hello ফাংশনের আগে এবং পরে মেসেজ প্রিন্ট করে।
  • @my_decorator ফাংশনের উপরে লেখা হওয়ায় say_hello() ফাংশনটি কল করলে আগে ও পরে ডেকোরেটরের কাজ সম্পন্ন হয়।

ডেকোরেটরের ব্যবহার:

ডেকোরেটর সাধারণত লগিং, অথেন্টিকেশন, ইনপুট যাচাই, প্রয়োজনীয় কাজের আগে/পরে নির্দিষ্ট কাজ সম্পন্ন করার জন্য ব্যবহৃত হয়।


জেনারেটর (Generator)

জেনারেটর হলো একটি বিশেষ ধরনের ফাংশন, যা বড় ডেটাসেট তৈরি বা পুনরাবৃত্তিমূলক ডেটা উৎপন্ন করতে ব্যবহৃত হয়। এটি yield কীওয়ার্ড ব্যবহার করে এবং প্রতিবার কল করার সময় বর্তমান অবস্থানে থেমে থাকে এবং পুনরায় শুরু করার সময় পরবর্তী মান প্রদান করে। জেনারেটর প্রচুর মেমোরি বাঁচাতে সাহায্য করে কারণ এটি সম্পূর্ণ লিস্ট না বানিয়ে একে একে মান প্রদান করে।

জেনারেটর তৈরির জন্য yield কীওয়ার্ড ব্যবহার:

yield কীওয়ার্ডের মাধ্যমে আমরা ফাংশনটিকে জেনারেটরে রূপান্তর করতে পারি।

উদাহরণ:

def my_generator():
    yield 1
    yield 2
    yield 3

gen = my_generator()
print(next(gen))  # আউটপুট: 1
print(next(gen))  # আউটপুট: 2
print(next(gen))  # আউটপুট: 3

ব্যাখ্যা:

  • এখানে my_generator একটি জেনারেটর ফাংশন, যা প্রতিবার yield দিয়ে একটি করে মান প্রদান করে।
  • next() ফাংশন ব্যবহার করে প্রতিবার একেকটি মান বের করা হয়।

লুপ দিয়ে জেনারেটর ব্যবহার:

জেনারেটরকে লুপের সাহায্যে সহজেই ইটারেট করা যায়।

def count_down(n):
    while n > 0:
        yield n
        n -= 1

for number in count_down(5):
    print(number)

আউটপুট:

5
4
3
2
1

ব্যাখ্যা:

  • এখানে count_down জেনারেটর ফাংশনটি প্রতি ইটারেশনে একটি করে সংখ্যা প্রদান করে যতক্ষণ না n এর মান শূন্যে পৌঁছায়।

জেনারেটরের সুবিধা:

  • মেমোরি ব্যবস্থাপনা: এটি বড় ডেটাসেট নিয়ে কাজ করার সময় মেমোরি সাশ্রয় করে।
  • দ্রুত ফলাফল: যেকোনো বড় ডেটাসেটের পরবর্তী আইটেমে দ্রুত অ্যাক্সেস পাওয়া যায়।
  • লাজি ইভালুয়েশন: এটি একবারে সম্পূর্ণ লিস্ট না বানিয়ে আইটেমগুলোকে লাজি ইভালুয়েশন (প্রয়োজন অনুসারে) তৈরি করে।

সংক্ষেপে তুলনা:

ফিচারডেকোরেটরজেনারেটর
ব্যবহারফাংশনের কার্যকারিতা বাড়ানো বা পরিবর্তন করতেপর্যায়ক্রমে ডেটা প্রদান করতে
কীওয়ার্ড@decorator_nameyield
উদাহরণলগিং, অথেন্টিকেশন, ইনপুট যাচাইবড় ডেটাসেট প্রক্রিয়াকরণ, বড় লুপ, স্ট্রিমিং
মেমোরি ব্যবস্থাপনাঅধিক ব্যবহার করতে পারেকম মেমোরি ব্যবহার করে

সংক্ষেপে:

  • ডেকোরেটর ফাংশনের কার্যকারিতা বাড়াতে বা পরিবর্তন করতে ব্যবহৃত হয়।
  • জেনারেটর বড় ডেটাসেট বা পুনরাবৃত্তিমূলক কাজ সম্পন্ন করার জন্য কার্যকরী একটি ফাংশন, যা yield এর মাধ্যমে একবারে একেকটি মান প্রদান করে।

ডেকোরেটর এবং জেনারেটর পাইথন প্রোগ্রামিংকে আরও সহজ, কার্যকর এবং মডুলার করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...