Closures – ফ্রি পাইথন কোর্স ২০২০ – ক্লাস ২৫

ক্লোজার হল একটি ফাংশন অবজেক্ট যা মেমোরিতে উপস্থিত না থাকলেও এনক্লোসিং স্কোপের মানগুলি মনে রাখে। আসুন আমরা ধাপে ধাপে এটি দেখি

প্রথমত, একটি নেস্টেড ফাংশন অন্য ফাংশনের অভ্যন্তরে সংজ্ঞায়িত একটি ফাংশন। এটা মনে রাখা খুব গুরুত্বপূর্ণ যে নেস্টেড ফাংশনগুলি এনক্লোসিং স্কোপের ভেরিয়েবলগুলি অ্যাক্সেস করতে পারে। তবে অন্ত্যত পাইথনে এগুলি কেবলমাত্র পঠনযোগ্য। তবে, কেউ এই পরিবর্তনগুলি পরিবর্তন করতে তাদের স্পষ্টরূপে “nonlocal” কীওয়ার্ডটি ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ:

def transmit_to_space(message):
    "This is the enclosing function"
    def data_transmitter():
        "The nested function"
        print(message)

    data_transmitter()

print(transmit_to_space("Test message"))

ফলাফল:

Test message
None

এটি ‘data_transmitter’ ফাংশনটি ‘massage’ অ্যাক্সেস করতে পারে তেমন কাজ করে। “nonlocal” কীওয়ার্ডটির ব্যবহারটি প্রদর্শন করতে এটি বিবেচনা করুন:

def print_msg(number):
    def printer():
        "Here we are using the nonlocal keyword"
        nonlocal number
        number=3
        print(number)
    printer()
    print(number)

print_msg(9)

ফলাফল:

3
3

nonlocal কীওয়ার্ড ব্যতীত আউটপুট “3 9” হবে, তবে এর ব্যবহারের সাথে আমরা “3 3” পাই যা হল “number” ভেরিয়েবলের মান পরিবর্তিত হয়।

এখন, কেমন হবে যদি আমরা নেস্টেড ফাংশনটি কল করার বদলে ফাংশনের অবজেক্টটি রিটার্ন করি। (মনে রাখবেন যে এমনকি ফাংশনগুলিও অবজেক্ট। (এটিই পাইথন))

def transmit_to_space(message):
    "This is the enclosing function"
    def data_transmitter():
        "The nested function"
        print(message)
    return data_transmitter

এবং আমরা ফাংশনটি নিম্নরূপ কল করি:

def transmit_to_space(message):
  "This is the enclosing function"
  def data_transmitter():
      "The nested function"
      print(message)
  return data_transmitter

fun2 = transmit_to_space("Burn the Sun!")
fun2()

ফলাফল:

Burn the Sun!

“Transmit_to_space ()” এর সম্পাদনা সম্পন্ন হলেও বার্তাটি বরং সংরক্ষণ করা হয়েছিল। এই কৌশলটি যার মাধ্যমে ডেটাগুলিকে কিছু কোডের সাথে অন্য মূল ফাংশনের সমাপ্তির পরেও সংযুক্ত করা হয় তাকে পাইথনে Closure বলা হয়।

সুবিধা: Closure গুলি গ্লোবাল ভেরিয়েবলের ব্যবহার এড়াতে পারে এবং কিছু গোপনীয় তথ্য গোপন সরবরাহ করে। (উদাঃ যখন কোনও শ্রেণিতে কয়েকটি ম্যথড থাকে তার পরিবর্তে Closure ব্যবহার করুন)।

Leave a Comment