مرکزی مواد پر جائیں
ماڈیول 5 · سبق 2 از 4کورس میں 18/36~12 min
ماڈیول اسباق (2/4)

پہلے سے طے شدہ اور مطلوبہ الفاظ کے پیرامیٹرز

فنکشن پیرامیٹرز میں ڈیفالٹ اقدار ہوسکتی ہیں: اگر کالر پاس نہیں ہوتا ہے۔ انہیں، پہلے سے طے شدہ استعمال کیا جاتا ہے. آپ فنکشن پاس کرنے والے پیرامیٹرز کو بھی کال کر سکتے ہیں۔ نام سے (کلیدی الفاظ کے دلائل)۔

پہلے سے طے شدہ پیرامیٹرز

Python
def saluta(nome, saluto="Ciao"):
    return f"{saluto}, {nome}!"

saluta("Ada")              # 'Ciao, Ada!'
saluta("Ada", "Hello")     # 'Hello, Ada!'

ڈیفالٹس والے پیرامیٹرز کو بعد آنا چاہیے جن کے بغیر:

Python
def f(a, b=1):     # OK
def f(a=1, b):     # SyntaxError

مطلوبہ الفاظ کے دلائل

آپ کسی بھی ترتیب سے، کال کو مزید بنا کر نام کے ذریعے دلائل دے سکتے ہیں۔ پڑھنے کے قابل:

Python
def crea_utente(nome, eta, attivo=True):
    return {"nome": nome, "eta": eta, "attivo": attivo}

crea_utente("Ada", 36)
crea_utente(nome="Ada", eta=36, attivo=False)
crea_utente(eta=36, nome="Ada")     # any order when all are keyword

سنہری اصول: کال میں، پوزیشنل آرگیومنٹس کلیدی الفاظ کے دلائل سے پہلے آتے ہیں۔

Python
crea_utente("Ada", eta=36)            # OK
crea_utente(nome="Ada", 36)           # SyntaxError

⚠️ بدلنے والا ڈیفالٹ نقصان

کبھی نہیں ایک تبدیل شدہ آبجیکٹ (فہرست، dict، سیٹ) کو بطور ڈیفالٹ ویلیو استعمال کریں: ڈیفالٹ کا ایک بار جائزہ لیا جاتا ہے، جب فنکشن کی تعریف کی جاتی ہے، اور اس کا اشتراک کیا جاتا ہے۔ تمام کالز

Python
def aggiungi(elemento, lista=[]):   # BUG!
    lista.append(elemento)
    return lista

aggiungi(1)    # [1]
aggiungi(2)    # [1, 2]    !!! not [2] as you'd expect
aggiungi(3)    # [1, 2, 3]

درست نمونہ: None کو بطور سنٹینل استعمال کریں اور اسے اندر بنائیں:

Python
def aggiungi(elemento, lista=None):
    if lista is None:
        lista = []
    lista.append(elemento)
    return lista

متغیر ڈیفالٹ دلائل کا خطرہ

متغیر اشیاء (جیسے فہرستیں یا لغات) کو کبھی بھی پیرامیٹرز کے لیے ڈیفالٹ اقدار کے طور پر استعمال نہ کریں: مثال کے طور پر def add(x, my_list=[])۔ پہلے سے طے شدہ قدر کا اندازہ صرف ایک بار اس وقت ہوتا ہے جب فنکشن کی وضاحت کی جاتی ہے، یعنی بعد میں آنے والی کالیں بالکل اسی تغیر پذیر آبجیکٹ کا اشتراک کریں گی! None استعمال کرنا بہترین عمل ہے:

Python
def add(x, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(x)
    return my_list

اسے آزمائیں

ورزش#python.m5.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

'طاقت(بیس، ایکسپوننٹ=2)' کی وضاحت کریں جو بیس ** ایکسپوننٹ کو لوٹاتا ہے۔ `square = power(5)` اور `cube = power(5, exponent=3)` کی گنتی کریں۔ اندازہ کریں `(مربع، مکعب)`۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

واپسی کی بنیاد ** ایکسپوننٹ

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m5.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

`create_record(name, values=None)` کی وضاحت کریں کہ، جب قدریں کوئی نہیں ہیں، ایک تازہ خالی فہرست استعمال کرتی ہے۔ قدروں میں 1 کو شامل کریں اور ریکارڈ ڈکٹ {'name': name, 'values': values} واپس کریں۔ اقدار کو پاس کیے بغیر اسے دو بار کال کریں اور `a` اور `b` کو تفویض کریں۔ `(a['values'], b['values'])` کا اندازہ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

None کو بطور ڈیفالٹ استعمال کریں اور فنکشن کے اندر فہرست بنائیں۔

3 کوششوں کے بعد حل دستیاب ہے۔

اضافی چیلنج

ورزش#python.m5.l2.e3
کوششیں: 0لوڈ ہو رہا ہے…

ایک فنکشن کی وضاحت کریں \`greet(name, message="Hello")\` جو فارمیٹ شدہ اسٹرنگ کو واپس کرتا ہے \`"{message}, {name}!"\`۔ آخری اظہار کے طور پر \`greet("Bob")\` کو کال کرکے فنکشن کی جانچ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

ایک ڈیفالٹ پیرامیٹر میسج="Hello" اور واپس آنے والے سلام کے لیے ایک f-string استعمال کریں۔

3 کوششوں کے بعد حل دستیاب ہے۔