কম্পিউটার টিউটোরিয়াল

পাইথনে রিকারসিভ ফাংশন কি নতুন নেমস্পেস তৈরি করে?

উত্তর: হ্যাঁ

প্রতিটি ফাংশন কল (রিকারসিভ হোক বা না) একটি নতুন লোকাল নেমস্পেস তৈরি করে।

কিভাবে কাজ করে

  • ইন্টারপ্রেটার ফাংশন কল দেখলে একটি ফ্রেম অবজেক্ট তৈরি করে
  • ফ্রেমটি ফ্রেম স্ট্যাক-এ পুশ হয়
  • প্রতিটি ফ্রেমের নিজস্ব প্রাইভেট নেমস্পেস থাকে
  • ফাংশন রিটার্ন হলে ফ্রেম পপ হয় এবং নেমস্পেস ডিসকার্ড হয়

গুরুত্বপূর্ণ: অবজেক্ট রেফারেন্স

প্যারামিটার হিসেবে অবজেক্ট পাস করলে রেফারেন্স পাস হয় (কল-বাই-অবজেক্ট-রেফারেন্স)।

  • নতুন নেমস্পেসে রেফারেন্সের কপি থাকে
  • কিন্তু একই অবজেক্টকে পয়েন্ট করে
  • মিউটেবল অবজেক্ট (লিস্ট, ডিক্ট) পরিবর্তন করলে কলিং ফাংশনেও প্রতিফলিত হয়

উদাহরণ

def recursive(lst, n):
    print(f"Call {n}: id(lst)={id(lst)}")
    if n > 0:
        lst.append(n)
        recursive(lst, n-1)

my_list = []
recursive(my_list, 3)
print(my_list)  # [3, 2, 1] - একই লিস্ট অবজেক্ট মিউটেট হয়েছে

সারসংক্ষেপ

  • প্রতিটি কল = নতুন নেমস্পেস (নতুন ফ্রেম)
  • ইমিউটেবল অবজেক্ট (int, str, tuple): কপি जैसा আচরণ
  • মিউটেবল অবজেক্ট (list, dict): একই অবজেক্ট শেয়ার, পরিবর্তন দৃশ্যমান
  1. পাইথনে match() ফাংশন কী

  2. পাইথনে নেমস্পেস প্যাকেজ তৈরি করার উপায়

  3. পাইথনে নেমস্পেস কী?

  4. পাইথনে রিকারসিভ ফাংশন তৈরি করার পদ্ধতি