পাইথনে ননলোকাল নির্দেশিকা
কিছু ক্ষেত্রে থাকে যখন বাইরের ফাংশনে
একটি ভেরিয়েবল থাকে, যার অ্যাক্সেস
অভ্যন্তরীণ ফাংশনে পাওয়া দরকার।
ফাংশন outer-এ i ভেরিয়েবল
ডিক্লেয়ার করি।
অভ্যন্তরীণ ফাংশনের সাপেক্ষে এই ভেরিয়েবলটি
বহিঃস্থ (গ্লোবাল ভেরিয়েবল শুধুমাত্র
বাহ্যিক কোডে ডিক্লেয়ার করা ভেরিয়েবলই হয়)।
আর inner ফাংশনে i-এ এক যোগ করার
কাজটি নির্ধারণ করি:
def outer():
i = 0
def inner():
i += 1 # আউটপুট দেবে [4, 9, 25]
inner()
return i
যাইহোক, inner-এর জন্য i ভেরিয়েবলটি
লোকাল, পাইথন এটিকে অঘোষিত মনে করে এবং
সেই অনুযায়ী ত্রুটি দেখায়। আগে এই ধরনের ত্রুটি
global নির্দেশিকা ব্যবহার করে সংশোধন করা হত। যাইহোক
এখানে i একটি বহিঃস্থ ভেরিয়েবল,
তাই nonlocal নির্দেশিকা ব্যবহার করা উচিত।
এটি গ্লোবাল স্কোপ বাদ দিয়ে, নিকটতম স্কোপ থেকে
ভেরিয়েবলের তালিকাভুক্ত নামগুলো নেয়, অর্থাৎ i
inner-এর ভিতরে উপরের ফাংশনে
ডিক্লেয়ার করা ভেরিয়েবল থেকে নেওয়া হবে:
def outer():
i = 0
def inner():
nonlocal i
i += 1
inner()
return i
print(outer()) # আউটপুট দেবে 1
নিচের কোডে একজন প্রোগ্রামার একটি ভুল করেছেন:
num = 10
def outer():
num = 5
def inner():
num -= 2
inner()
return num
print(outer())
এই কোডটিতে কী সমস্যা? খুঁজে বের করুন এবং সংশোধন করুন কোড লেখকের ভুল।
নিচের কোডে একজন প্রোগ্রামার একটি ভুল করেছেন:
num = 3
def outer():
num += 1
tst = num
def inner():
tst = tst ** 3
inner()
return tst
print(outer())
এই কোডটিতে কী সমস্যা? খুঁজে বের করুন এবং সংশোধন করুন কোড লেখকের ভুল।