ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 5 · 4లో పాఠం 2కోర్సులో 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

⚠️ మార్చగల డిఫాల్ట్ పిట్‌ఫాల్

ఎప్పటికీ మార్చగల వస్తువును (జాబితా, డిక్ట్, సెట్) డిఫాల్ట్ విలువగా ఉపయోగించవద్దు: ఫంక్షన్ నిర్వచించబడినప్పుడు మరియు అంతటా భాగస్వామ్యం చేయబడినప్పుడు డిఫాల్ట్ ఒకసారి మూల్యాంకనం చేయబడుతుంది అన్ని కాల్స్.

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)`ని నిర్వచించండి. `స్క్వేర్ = పవర్(5)` మరియు `క్యూబ్ = పవర్(5, ఎక్స్‌పోనెంట్=3)` గణించండి. `(చదరపు, ఘనం)` మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

రిటర్న్ బేస్ ** ఘాతాంకం

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#python.m5.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

విలువలు ఏవీ కానప్పుడు తాజా ఖాళీ జాబితాను ఉపయోగించే `create_record(name, values=None)`ని నిర్వచించండి. విలువలకు 1 జోడించి, రికార్డ్ డిక్ట్ {'name': name, 'values': values}ని తిరిగి ఇవ్వండి. విలువలను దాటకుండా రెండుసార్లు కాల్ చేసి, `a` మరియు `b`కి కేటాయించండి. మూల్యాంకనం `(a['విలువలు'], b['విలువలు'])`.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

డిఫాల్ట్‌గా ఏదీ వద్దు మరియు ఫంక్షన్ లోపల జాబితాను సృష్టించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

అదనపు సవాలు

వ్యాయామం#python.m5.l2.e3
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ఫార్మాట్ చేయబడిన స్ట్రింగ్ \`"{message}, {name}!"\`ని అందించే \`greet(name, message="Hello")\` ఫంక్షన్‌ని నిర్వచించండి. చివరి వ్యక్తీకరణగా \`greet("బాబ్")\`ని కాల్ చేయడం ద్వారా ఫంక్షన్‌ని పరీక్షించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

తిరిగి వచ్చిన గ్రీటింగ్ కోసం డిఫాల్ట్ పారామీటర్ సందేశం="హలో" మరియు f-స్ట్రింగ్ ఉపయోగించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది