మాడ్యూల్ పాఠాలు (2/4)
డిఫాల్ట్ మరియు కీవర్డ్ పారామితులు
ఫంక్షన్ పారామితులు డిఫాల్ట్ విలువలను కలిగి ఉండవచ్చు: కాలర్ పాస్ కాకపోతే వాటిని, డిఫాల్ట్లు ఉపయోగించబడతాయి. మీరు ఫంక్షన్ పాసింగ్ పారామితులను కూడా కాల్ చేయవచ్చు పేరు ద్వారా (కీవర్డ్ ఆర్గ్యుమెంట్లు).
డిఫాల్ట్ పారామితులు
def saluta(nome, saluto="Ciao"):
return f"{saluto}, {nome}!"
saluta("Ada") # 'Ciao, Ada!'
saluta("Ada", "Hello") # 'Hello, Ada!'డిఫాల్ట్లతో కూడిన పారామీటర్లు తప్పనిసరిగా తర్వాత లేని వాటి తర్వాత రావాలి:
def f(a, b=1): # OK
def f(a=1, b): # SyntaxErrorకీవర్డ్ వాదనలు
మీరు కాల్ను మరింత చేస్తూ, ఏ క్రమంలోనైనా పేరు ద్వారా వాదనలను పంపవచ్చు చదవగలిగే:
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గోల్డెన్ రూల్: కాల్లో, కీవర్డ్ ఆర్గ్యుమెంట్లకు ముందు స్థాన వాదనలు వస్తాయి.
crea_utente("Ada", eta=36) # OK
crea_utente(nome="Ada", 36) # SyntaxError⚠️ మార్చగల డిఫాల్ట్ పిట్ఫాల్
ఎప్పటికీ మార్చగల వస్తువును (జాబితా, డిక్ట్, సెట్) డిఫాల్ట్ విలువగా ఉపయోగించవద్దు: ఫంక్షన్ నిర్వచించబడినప్పుడు మరియు అంతటా భాగస్వామ్యం చేయబడినప్పుడు డిఫాల్ట్ ఒకసారి మూల్యాంకనం చేయబడుతుంది అన్ని కాల్స్.
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ని సెంటినెల్గా ఉపయోగించండి మరియు లోపల దీన్ని సృష్టించండి:
def aggiungi(elemento, lista=None):
if lista is None:
lista = []
lista.append(elemento)
return listaమార్చగల డిఫాల్ట్ వాదనల ప్రమాదం
పారామీటర్ల కోసం డిఫాల్ట్ విలువలుగా మార్చగల వస్తువులను (జాబితాలు లేదా నిఘంటువుల వంటివి) ఉపయోగించవద్దు: ఉదాహరణకు def add(x, my_list=[]). ఫంక్షన్ నిర్వచించబడినప్పుడు డిఫాల్ట్ విలువ ఒక్కసారి మాత్రమే మూల్యాంకనం చేయబడుతుంది, అంటే తదుపరి కాల్లు అదే మార్చగల వస్తువును పంచుకుంటాయి! Noneని ఉపయోగించడం ఉత్తమ అభ్యాసం:
def add(x, my_list=None):
if my_list is None:
my_list = []
my_list.append(x)
return my_listదీనిని ప్రయత్నించండి
బేస్ ** ఘాతాంకాన్ని అందించే `పవర్(బేస్, ఘాతాంకం=2)`ని నిర్వచించండి. `స్క్వేర్ = పవర్(5)` మరియు `క్యూబ్ = పవర్(5, ఎక్స్పోనెంట్=3)` గణించండి. `(చదరపు, ఘనం)` మూల్యాంకనం చేయండి.
సూచనను చూపించు
రిటర్న్ బేస్ ** ఘాతాంకం
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
విలువలు ఏవీ కానప్పుడు తాజా ఖాళీ జాబితాను ఉపయోగించే `create_record(name, values=None)`ని నిర్వచించండి. విలువలకు 1 జోడించి, రికార్డ్ డిక్ట్ {'name': name, 'values': values}ని తిరిగి ఇవ్వండి. విలువలను దాటకుండా రెండుసార్లు కాల్ చేసి, `a` మరియు `b`కి కేటాయించండి. మూల్యాంకనం `(a['విలువలు'], b['విలువలు'])`.
సూచనను చూపించు
డిఫాల్ట్గా ఏదీ వద్దు మరియు ఫంక్షన్ లోపల జాబితాను సృష్టించండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
అదనపు సవాలు
ఫార్మాట్ చేయబడిన స్ట్రింగ్ \`"{message}, {name}!"\`ని అందించే \`greet(name, message="Hello")\` ఫంక్షన్ని నిర్వచించండి. చివరి వ్యక్తీకరణగా \`greet("బాబ్")\`ని కాల్ చేయడం ద్వారా ఫంక్షన్ని పరీక్షించండి.
సూచనను చూపించు
తిరిగి వచ్చిన గ్రీటింగ్ కోసం డిఫాల్ట్ పారామీటర్ సందేశం="హలో" మరియు f-స్ట్రింగ్ ఉపయోగించండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది