Python میں متغیر پاسنگ کو سمجھنا: حوالہ بمقابلہ قدر

Python میں متغیر پاسنگ کو سمجھنا: حوالہ بمقابلہ قدر
Python میں متغیر پاسنگ کو سمجھنا: حوالہ بمقابلہ قدر

تعارف: پائتھون ویری ایبل پاسنگ کی تلاش

Python میں، متغیرات کو فنکشنز میں منتقل کرنے کا طریقہ بعض اوقات مبہم ہو سکتا ہے، خاص طور پر جب پاس بائی ریفرنس اور پاس بائی ویلیو کے تصورات کو سمجھنے کی کوشش کی جائے۔ اس الجھن کو اکثر ایسے منظرناموں میں اجاگر کیا جاتا ہے جہاں ڈویلپر کسی فنکشن کے اندر متغیر میں تبدیلی کی توقع کرتے ہیں کہ وہ فنکشن کے باہر بھی جھلکے۔

اس کی وضاحت کرنے کے لیے، ایک کلاس پر غور کریں جہاں ایک طریقہ کے اندر ایک متغیر کو تبدیل کیا جاتا ہے۔ متوقع نتیجہ ہمیشہ اصل نتیجہ سے مماثل نہیں ہوسکتا ہے کیونکہ Python متغیر پاسنگ کو کیسے ہینڈل کرتا ہے۔ یہ مضمون اس طرز عمل کے پیچھے میکانکس کا مطالعہ کرتا ہے اور Python میں پاس بہ حوالہ اثرات حاصل کرنے کے بارے میں بصیرت فراہم کرتا ہے۔

کمانڈ تفصیل
self.variable = ['Original'] ایک واحد سٹرنگ عنصر کے ساتھ ایک تغیر پذیر فہرست کو شروع کرتا ہے۔
var[0] = 'Changed' طریقہ کو پاس کردہ فہرست کے پہلے عنصر کو تبدیل کرتا ہے۔
class Wrapper: ایک قدر کو سمیٹنے کے لیے ایک کلاس کی وضاحت کرتا ہے، جس سے پاس بہ حوالہ جیسا سلوک ہوتا ہے۔
self.value = value ریپر کلاس کے اندر لپیٹی ہوئی قدر کو شروع کرتا ہے۔
var.value = 'Changed' طریقہ کو پاس کردہ ریپر مثال کے ویلیو انتساب میں ترمیم کرتا ہے۔
self.variable = {'key': 'Original'} ایک واحد کلیدی قدر کے جوڑے کے ساتھ ایک تغیر پذیر لغت شروع کرتا ہے۔
var['key'] = 'Changed' طریقہ کو پاس کردہ لغت میں کلید سے وابستہ قدر کو تبدیل کرتا ہے۔

ازگر میں پاس بہ حوالہ لاگو کرنا

پہلا اسکرپٹ Python میں پاس بائی ریفرنس کے اثر کو حاصل کرنے کے لیے ایک تغیر پذیر فہرست کا استعمال کرتا ہے۔ جماعت میں PassByReference، متغیر self.variable ایک فہرست کے طور پر شروع کیا جاتا ہے جس میں واحد سٹرنگ عنصر 'اصل' ہوتا ہے۔ طریقہ کار self.change(self.variable) کہا جاتا ہے، اس فہرست کو طریقہ کار میں منتقل کرنا۔ طریقہ کے اندر، حکم var[0] = 'Changed' فہرست کے پہلے عنصر میں ترمیم کرتا ہے۔ چونکہ فہرستیں متغیر ہوتی ہیں، اس لیے یہ تبدیلی طریقہ سے باہر ظاہر ہوتی ہے، جس کے نتیجے میں آؤٹ پٹ 'تبدیل' ہوتا ہے۔ یہ اسکرپٹ یہ ظاہر کرتا ہے کہ کس طرح تبدیل کرنے والی اقسام جیسے فہرستوں کا استعمال پاس بہ حوالہ سلوک کی نقل کر سکتا ہے۔

دوسرا اسکرپٹ متعارف کرایا گیا ہے a Wrapper ایک قدر کو سمیٹنے کے لیے کلاس، پاس بہ حوالہ جیسی فعالیت کی اجازت دیتا ہے۔ میں PassByReference کلاس، متغیر self.variable کی ایک مثال کے ساتھ شروع کیا جاتا ہے۔ Wrapper 'اصل' پر مشتمل ہے۔ طریقہ کار self.change(self.variable) کہا جاتا ہے، گزرنا Wrapper مثال۔ طریقہ کے اندر، حکم var.value = 'Changed' میں ترمیم کرتا ہے۔ value کی خصوصیت Wrapper مثال۔ یہ تبدیلی طریقہ سے باہر ظاہر ہوتی ہے، جس کے نتیجے میں آؤٹ پٹ 'تبدیل' ہوتا ہے۔ یہ نقطہ نظر یہ ظاہر کرتا ہے کہ کس طرح کسٹم ریپر کلاس بنانا اسی طرح کے اثرات پاس بہ حوالہ حاصل کر سکتا ہے۔

تغیر پذیر ریاستی گزرنے کے لیے ڈکشنریوں کا استعمال

تیسرا اسکرپٹ پاس بہ حوالہ کے اثر کو حاصل کرنے کے لیے لغت کا استعمال کرتا ہے۔ میں PassByReference کلاس، متغیر self.variable ایک کلیدی قدر کے جوڑے کے ساتھ ایک لغت کے طور پر شروع کیا جاتا ہے {'key': 'Original'}۔ طریقہ کار self.change(self.variable) کہا جاتا ہے، اس لغت کو طریقہ میں منتقل کرنا۔ طریقہ کے اندر، حکم var['key'] = 'Changed' لغت میں کلید سے وابستہ قدر میں ترمیم کرتا ہے۔ چونکہ لغات متغیر ہوتے ہیں، اس لیے یہ تبدیلی طریقہ سے باہر ظاہر ہوتی ہے، جس کے نتیجے میں آؤٹ پٹ 'تبدیل' ہوتا ہے۔ یہ اسکرپٹ اس بات پر روشنی ڈالتا ہے کہ کس طرح تغیر پذیر اقسام جیسے لغات کا استعمال پاس بہ حوالہ رویے کی تقلید کر سکتا ہے۔

مجموعی طور پر، یہ مثالیں Python میں پاس بہ حوالہ نقل کرنے کے مختلف طریقوں کی وضاحت کرتی ہیں۔ تغیر پذیر اقسام جیسے فہرستوں اور لغات کو استعمال کرکے یا حسب ضرورت ریپر کلاس کو نافذ کرکے، مطلوبہ اثر حاصل کرنا ممکن ہے جہاں فنکشن کے اندر متغیر میں تبدیلیاں فنکشن سے باہر ظاہر ہوتی ہیں۔ ان تکنیکوں کو سمجھنا ان ڈویلپرز کے لیے بہت ضروری ہے جو اپنے Python پروگراموں میں متغیرات کو زیادہ مؤثر طریقے سے جوڑنا چاہتے ہیں۔

نقل کرنے کے لیے کسی آبجیکٹ کی خصوصیت میں ترمیم کرنا

ازگر: نقل پذیر اقسام کا استعمال کرتے ہوئے پاس بہ حوالہ نقل کرنا

class PassByReference:
    def __init__(self):
        self.variable = ['Original']
        self.change(self.variable)
        print(self.variable[0])

    def change(self, var):
        var[0] = 'Changed'

pbr = PassByReference()

پاس بہ حوالہ اثر حاصل کرنے کے لیے ریپر کلاس کا استعمال

ازگر: تغیر پذیر ریاست کے لیے ریپر کلاس کا نفاذ

class Wrapper:
    def __init__(self, value):
        self.value = value

class PassByReference:
    def __init__(self):
        self.variable = Wrapper('Original')
        self.change(self.variable)
        print(self.variable.value)

    def change(self, var):
        var.value = 'Changed'

pbr = PassByReference()

پاس بہ حوالہ نقل کرنے کے لیے ایک لغت پاس کرنا

ازگر: متغیر حالت کے گزرنے کے لیے ڈکشنریوں کا استعمال

class PassByReference:
    def __init__(self):
        self.variable = {'key': 'Original'}
        self.change(self.variable)
        print(self.variable['key'])

    def change(self, var):
        var['key'] = 'Changed'

pbr = PassByReference()

ازگر کے متغیر ہینڈلنگ میکانزم کو سمجھنا

Python میں، متغیر گزرنے کا تصور پیچیدہ ہو سکتا ہے، خاص طور پر جب تغیر پذیر اور ناقابل تغیر اشیاء کے درمیان فرق کیا جائے۔ تغیر پذیر آبجیکٹ، جیسے فہرستیں اور لغات، کو جگہ جگہ تبدیل کیا جا سکتا ہے، جس کا مطلب ہے کہ اگر آپ کسی تغیر پذیر آبجیکٹ کو کسی فنکشن میں منتقل کرتے ہیں، تو فنکشن کے اندر کی گئی کوئی بھی ترمیم فنکشن سے باہر کی اصل چیز کو متاثر کرے گی۔ دوسری طرف، غیر تبدیل شدہ اشیاء، جیسے تار اور ٹوپل، کو جگہ میں تبدیل نہیں کیا جا سکتا۔ اس لیے، جب آپ کسی غیر متغیر آبجیکٹ کو کسی فنکشن میں منتقل کرتے ہیں، تو فنکشن کے اندر کوئی بھی ترمیم ایک نیا آبجیکٹ بناتی ہے، جس سے اصل آبجیکٹ میں کوئی تبدیلی نہیں ہوتی۔

Python میں متغیر ہینڈلنگ کا ایک اور پہلو یہ سمجھنا شامل ہے کہ حوالہ جات کیسے کام کرتے ہیں۔ جب آپ کسی متغیر کو دوسرے متغیر کو تفویض کرتے ہیں، تو آپ اصل میں آبجیکٹ کا حوالہ تفویض کر رہے ہوتے ہیں، آبجیکٹ کو کاپی نہیں کرتے۔ اس کا مطلب یہ ہے کہ اگر آبجیکٹ متغیر ہے اور آپ اسے کسی بھی متغیر کے ذریعے تبدیل کرتے ہیں، تو تبدیلیاں تمام حوالوں میں ظاہر ہوں گی۔ اس طرز عمل کو بدلنے والی اقسام یا حسب ضرورت کلاسز کا استعمال کرکے پاس بہ حوالہ نقل کرنے کے لیے فائدہ اٹھایا جا سکتا ہے۔ مزید برآں، نیسٹڈ فنکشنز کے اندر عالمی اور غیر مقامی متغیرات کا ازگر کا ہینڈلنگ متغیر دائرہ کار اور تغیر پذیری کو منظم کرنے کا ایک اور طریقہ پیش کرتا ہے۔

Python میں متغیر پاسنگ کے بارے میں عام سوالات

  1. کیا ازگر پاس بہ قدر ہے یا پاس بہ حوالہ؟
  2. ازگر ایک طریقہ کار کا استعمال کرتا ہے جسے "پاس-بائی-آبجیکٹ-ریفرنس" کہا جاتا ہے جہاں اشیاء کے حوالے پاس کیے جاتے ہیں، نہ کہ خود اشیاء۔
  3. جب کسی فنکشن کو پاس کیا جائے تو میری اسٹرنگ کیوں نہیں بدلتی؟
  4. سٹرنگز Python میں ناقابل تغیر ہیں، اس لیے فنکشن کے اندر کوئی بھی ترمیم اصل میں ترمیم کرنے کے بجائے ایک نئی سٹرنگ بناتی ہے۔
  5. میں ناقابل تغیر اقسام کے ساتھ پاس بہ حوالہ نقل کیسے کرسکتا ہوں؟
  6. غیر تبدیل شدہ قسم کو پکڑنے اور اس کے بجائے کنٹینر کو منتقل کرنے کے لیے ایک متغیر کنٹینر کا استعمال کریں، جیسے فہرست یا لغت۔
  7. جب میں کسی فنکشن کے اندر متغیر کو دوبارہ تفویض کرتا ہوں تو کیا ہوتا ہے؟
  8. کسی فنکشن کے اندر متغیر کو دوبارہ تفویض کرنے سے مقامی حوالہ بدل جاتا ہے، فنکشن سے باہر اصل متغیر نہیں۔
  9. کیا میں کسی فنکشن کے اندر عالمی متغیر کو تبدیل کر سکتا ہوں؟
  10. جی ہاں، کا استعمال کرتے ہوئے متغیر کو عالمی قرار دے کر global کلیدی لفظ
  11. کیا ہے nonlocal مطلوبہ الفاظ کے لیے استعمال کیا؟
  12. دی nonlocal کلیدی لفظ آپ کو قریب ترین منسلک دائرہ کار میں متغیرات میں ترمیم کرنے کی اجازت دیتا ہے جو عالمی نہیں ہے۔
  13. فنکشنز میں بھیجے جانے پر لغات کیسے برتاؤ کرتی ہیں؟
  14. لغتیں، متغیر ہونے کی وجہ سے، اصل آبجیکٹ میں افعال کے اندر کی گئی تبدیلیوں کی عکاسی کرتی ہیں۔
  15. کیا میں ازگر میں حوالہ کے ذریعہ اپنی مرضی کے مطابق آبجیکٹ پاس کرسکتا ہوں؟
  16. ہاں، حسب ضرورت اشیاء کو منتقل کرنا متغیر قسموں کی طرح کام کرتا ہے، جہاں افعال کے اندر صفات میں تبدیلی اصل آبجیکٹ کو متاثر کرتی ہے۔
  17. ریپر کلاس کیا ہے، اور یہ متغیر گزرنے میں کس طرح مدد کرتا ہے؟
  18. ایک ریپر کلاس ایک قدر کو گھیر لیتی ہے، جو کسی دوسری صورت میں ناقابل تغیر قسم کا ایک تغیر پذیر حوالہ فراہم کرتی ہے۔

پائتھون ویری ایبل پاسنگ پر بصیرت کا اختتام کرنا

یہ سمجھنا کہ Python کس طرح متغیر پاسنگ کو ہینڈل کرتا ہے موثر پروگرامنگ کے لیے بہت ضروری ہے۔ متغیر اشیاء اور حسب ضرورت کلاسوں کا فائدہ اٹھا کر، ڈویلپرز پاس بہ حوالہ نقل کر سکتے ہیں، جس سے فنکشنز کو متغیرات کو براہ راست تبدیل کرنے کی اجازت ملتی ہے۔ یہ علم زیادہ موثر اور قابل پیشن گوئی کوڈ لکھنے میں مدد کرتا ہے، پائتھون پروگراموں کے اندر متغیر دائرہ کار اور تغیر پذیری کو منظم کرنے کی صلاحیت کو بڑھاتا ہے۔ ان تکنیکوں کو لاگو کرنا یقینی بناتا ہے کہ مطلوبہ تبدیلیاں فنکشن کی حدود میں جھلکتی ہیں۔