मॉड्यूल पाठ (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 जोड़ें और रिकॉर्ड निर्देश {'नाम': नाम, 'मान': मान} लौटाएं। मान पारित किए बिना इसे दो बार कॉल करें और `ए` और `बी` असाइन करें। `(a['values'], b['values'])` का मूल्यांकन करें।
संकेत दिखाएँ
डिफ़ॉल्ट के रूप में कोई नहीं का उपयोग करें और फ़ंक्शन के अंदर सूची बनाएं।
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
एक फ़ंक्शन को परिभाषित करें \`greet(name, message="Hello")\` जो स्वरूपित स्ट्रिंग \`"{message}, {name}!"\` लौटाता है। अंतिम अभिव्यक्ति के रूप में \`greet("Bob")\` को कॉल करके फ़ंक्शन का परीक्षण करें।
संकेत दिखाएँ
लौटाए गए अभिवादन के लिए एक डिफ़ॉल्ट पैरामीटर संदेश = "हैलो" और एक एफ-स्ट्रिंग का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है