मुख्य सामग्री पर जाएं
मॉड्यूल 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 जोड़ें और रिकॉर्ड निर्देश {'नाम': नाम, 'मान': मान} लौटाएं। मान पारित किए बिना इसे दो बार कॉल करें और `ए` और `बी` असाइन करें। `(a['values'], b['values'])` का मूल्यांकन करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

डिफ़ॉल्ट के रूप में कोई नहीं का उपयोग करें और फ़ंक्शन के अंदर सूची बनाएं।

3 प्रयासों के बाद समाधान उपलब्ध है

अतिरिक्त चुनौती

व्यायाम#python.m5.l2.e3
प्रयास: 0लोड हो रहा है...

एक फ़ंक्शन को परिभाषित करें \`greet(name, message="Hello")\` जो स्वरूपित स्ट्रिंग \`"{message}, {name}!"\` लौटाता है। अंतिम अभिव्यक्ति के रूप में \`greet("Bob")\` को कॉल करके फ़ंक्शन का परीक्षण करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

लौटाए गए अभिवादन के लिए एक डिफ़ॉल्ट पैरामीटर संदेश = "हैलो" और एक एफ-स्ट्रिंग का उपयोग करें।

3 प्रयासों के बाद समाधान उपलब्ध है