தொகுதி பாடங்கள் (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['values'], b['values'])` என்பதை மதிப்பிடுக.
குறிப்பைக் காட்டு
இயல்புநிலையாக None ஐப் பயன்படுத்தி, செயல்பாட்டின் உள்ளே பட்டியலை உருவாக்கவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
கூடுதல் சவால்
\`greet(name, message="Hello")\` என்ற செயல்பாட்டை வரையறுக்கவும், அது \`"{message}, {name}!"\` என்ற வடிவமைக்கப்பட்ட சரத்தை வழங்கும். \`greet("Bob")\` என்பதை கடைசி வெளிப்பாடாக அழைப்பதன் மூலம் செயல்பாட்டைச் சோதிக்கவும்.
குறிப்பைக் காட்டு
திரும்பிய வாழ்த்துக்கு இயல்புநிலை அளவுரு செய்தி="ஹலோ" மற்றும் f-ஸ்ட்ரிங் பயன்படுத்தவும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்