Python فنکشنز میں ڈیفالٹ آرگیومینٹس کو کیسے استعمال اور نوٹ کریں۔

کاروبار

Python فنکشن ڈیفینیشن میں ڈیفالٹ آرگیومنٹ سیٹ کرنا ڈیفالٹ ویلیو کو استعمال کرنے کا سبب بنتا ہے اگر فنکشن کال کے دوران دلیل کو چھوڑ دیا جاتا ہے۔

ذیل میں درج ذیل تفصیلات بیان کی گئی ہیں۔

  • ڈیفالٹ دلائل ترتیب دینا
  • پہلے سے طے شدہ دلائل کی پوزیشن پر پابندیاں
  • نوٹ کریں کہ جب فہرست یا لغت کو بطور ڈیفالٹ ویلیو استعمال کیا جاتا ہے۔

ڈیفالٹ دلائل ترتیب دینا

اگر آرگیومینٹ کا نام = ڈیفالٹ ویلیو فنکشن ڈیفینیشن میں ہے، تو ڈیفالٹ ویلیو استعمال کی جائے گی جب متعلقہ دلیل کو چھوڑ دیا جائے گا۔

def func_default(arg1, arg2='default_x', arg3='default_y'):
    print(arg1)
    print(arg2)
    print(arg3)

func_default('a')
# a
# default_x
# default_y

func_default('a', 'b')
# a
# b
# default_y

func_default('a', arg3='c')
# a
# default_x
# c

پہلے سے طے شدہ دلائل کی پوزیشن پر پابندیاں

کسی فنکشن کی وضاحت کرتے وقت عام دلیل (ایک دلیل جس کے لیے کوئی ڈیفالٹ ویلیو متعین نہیں ہے) سے پہلے ڈیفالٹ دلیل رکھنا غلطی کا نتیجہ ہے۔
SyntaxError

# def func_default_error(arg2='default_a', arg3='default_b', arg1):
#     print(arg1)
#     print(arg2)

# SyntaxError: non-default argument follows default argument

نوٹ کریں کہ جب فہرست یا لغت کو بطور ڈیفالٹ ویلیو استعمال کیا جاتا ہے۔

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

جب فنکشن کی تعریف پر عمل کیا جاتا ہے تو پہلے سے طے شدہ دلیل کی اقدار کا بائیں سے دائیں تک جائزہ لیا جاتا ہے۔ اس کا مطلب ہے کہ ڈیفالٹ آرگیومینٹ ایکسپریشن کا اندازہ صرف ایک بار اس وقت ہوتا ہے جب فنکشن کی وضاحت کی جاتی ہے، اور ہر کال کے لیے وہی "حساب شدہ” قدر استعمال کی جاتی ہے۔
8.7. Function definitions — Python 3.10.2 Documentation

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

فہرست سازی کی مثال۔

def func_default_list(l=[0, 1, 2], v=3):
    l.append(v)
    print(l)

func_default_list([0, 0, 0], 100)
# [0, 0, 0, 100]

func_default_list()
# [0, 1, 2, 3]

func_default_list()
# [0, 1, 2, 3, 3]

func_default_list()
# [0, 1, 2, 3, 3, 3]

لغت کی مثال۔

def func_default_dict(d={'default': 0}, k='new', v=100):
    d[k] = v
    print(d)

func_default_dict()
# {'default': 0, 'new': 100}

func_default_dict(k='new2', v=200)
# {'default': 0, 'new': 100, 'new2': 200}

جب بھی فنکشن کو بلایا جاتا ہے تو ایک نئی آبجیکٹ بنتی ہے۔

def func_default_list_none(l=None, v=3):
    if l is None:
        l = [0, 1, 2]
    l.append(v)
    print(l)

func_default_list_none()
# [0, 1, 2, 3]

func_default_list_none()
# [0, 1, 2, 3]