কম্পিউটার

পাইথন বন্ধ?


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

পাইথন নেস্টেড ফাংশন

অন্য ফাংশনের ভিতরে সংজ্ঞায়িত একটি ফাংশনকে নেস্টেড ফাংশন বলে। একটি নেস্টেড ফাংশন এনক্লোজিং স্কোপের ভেরিয়েবল অ্যাক্সেস করতে পারে।

def funcOut():
   print("This is outer function.")
   def funcIn():
      print("This function is defined inside funcOut. \nThis function(funcIn) is called\
nested function.")
   print("We can call nested function here.")
   funcIn()
print("We are in outer function.\nCalling funcOut.")
funcOut()

আউটপুট

We are in outer function.
Calling funcOut.
This is outer function.
We can call nested function here.
This function is defined inside funcOut.
This function(funcIn) is called nested function.

সুতরাং, funcIn হল নেস্টেড ফাংশন যা funcOut-এর ভিতরে সংজ্ঞায়িত করা হয়েছে। উপরের আউটপুট দেখে, আমরা ফাংশনের কলিং সিকোয়েন্স বুঝতে পারি।

যদি আমরা funcOut থেকে funcIn-এর সমস্ত কার্যকারিতা পেতে চাই, তার জন্য আমাদের উপরের প্রোগ্রামে "রিটার্ন funcIn" করতে হতে পারে, একে পাইথনে ক্লোজার বলা হয়।

সংক্ষেপে, ক্লোজার হল একটি ফাংশন (বস্তু) যা তার সৃষ্টির পরিবেশকে মনে রাখে (পরিবেশের সুযোগ)।

def closureFunc(start):
   def incrementBy(inc):
      return start + inc
   return incrementBy
closure1 = closureFunc(9)
closure2 = closureFunc(90)
print ('clsure1(3) = %s' %(closure1(3)))
print ('closure2(3) = %s' %(closure2(3)))

আউটপুট

clsure1(3) = 12
closure2(3) = 93

closure1(3) এর সাথে ভেরিয়েবল closure1(যা ফাংশন টাইপ) কল করলে 12 রিটার্ন হবে, যখন closure2(3) 93 রিটার্ন করবে। যদিও closure1 এবং closure2 উভয়ই একই ফাংশন ইনক্রিমেন্টকে উল্লেখ করছে, আমাদের কাছে দুটি ভিন্ন ভেরিয়েবল আছে closure1 এবং closure2 যা শনাক্তকারী closureFunc দ্বারা একসাথে আবদ্ধ হয়, যা বিভিন্ন ফলাফলের দিকে পরিচালিত করে।

__closure__ attribute and cell objects

আরও তথ্য পেতে আমরা __closure__ বৈশিষ্ট্য এবং সেল অবজেক্ট ব্যবহার করতে পারি:

def closureFunc(start):
   def incrementBy(inc):
      return start + inc
   return incrementBy

a= closureFunc(9)
b = closureFunc(90)

print ('type(a)=%s' %(type(a)))
print ('a.__closure__=%s' %(a.__closure__))
print ('type(a.__closure__[0])=%s' %(type(a.__closure__[0])))
print ('a.__closure__[0].cell_contents=%s' %(a.__closure__[0].cell_contents))

print ('type(b)=%s' %(type(b)))
print ('b.__closure__=%s' %(b.__closure__))
print ('type(b.__closure__[0])=%s' %(type(b.__closure__[0])))
print ('b.__closure__[0].cell_contents=%s' %(b.__closure__[0].cell_contents))

আউটপুট

type(a) = <class 'function'>
a.__closure__ = <cell at 0x057F8490: int object at 0x68A65770>

type(a.__closure__[0]) = <class 'cell'>
a.__closure__[0].cell_contents = 9

type(b)=<class 'function'>
b.__closure__ = <cell at 0x0580BD50: int object at 0x68A65C80>

type(b.__closure__[0]) = <class 'cell'>
b.__closure__[0].cell_contents=90

উপরের আউটপুট থেকে, আমরা দেখতে পাচ্ছি যে বস্তুর প্রতিটি কোষ তার তৈরির সময় মান ধরে রাখে।


  1. পাইথনে প্যাটার্ন কিভাবে প্রিন্ট করবেন?

  2. পাইথনে issubset() ফাংশন

  3. ইন্টারসেকশন() ফাংশন পাইথন

  4. Python এ print() ফাংশন কি করে?