முக்கிய உள்ளடக்கத்திற்குச் செல்லவும்
தொகுதி 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

⚠️ மாறக்கூடிய இயல்புநிலை ஆபத்து

எப்போதும் மாறக்கூடிய பொருளை (பட்டியல், கட்டளை, தொகுப்பு) இயல்புநிலை மதிப்பாகப் பயன்படுத்தவும்: செயல்பாடு வரையறுக்கப்பட்டு, முழுவதும் பகிரப்படும் போது, இயல்புநிலை ஒருமுறை மதிப்பிடப்படும் அனைத்து அழைப்புகள்.

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['values'], b['values'])` என்பதை மதிப்பிடுக.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

இயல்புநிலையாக None ஐப் பயன்படுத்தி, செயல்பாட்டின் உள்ளே பட்டியலை உருவாக்கவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்

கூடுதல் சவால்

உடற்பயிற்சி#python.m5.l2.e3
முயற்சிகள்: 0ஏற்றுகிறது…

\`greet(name, message="Hello")\` என்ற செயல்பாட்டை வரையறுக்கவும், அது \`"{message}, {name}!"\` என்ற வடிவமைக்கப்பட்ட சரத்தை வழங்கும். \`greet("Bob")\` என்பதை கடைசி வெளிப்பாடாக அழைப்பதன் மூலம் செயல்பாட்டைச் சோதிக்கவும்.

எடிட்டரை ஏற்றுகிறது…
குறிப்பைக் காட்டு

திரும்பிய வாழ்த்துக்கு இயல்புநிலை அளவுரு செய்தி="ஹலோ" மற்றும் f-ஸ்ட்ரிங் பயன்படுத்தவும்.

3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்