अपने कोड को पुनः प्रयोग योग्य फ़ंक्शन में संरचित करें, डिफ़ॉल्ट वैल्यू में महारत हासिल करें और वेरिएबल स्कोप को समझें।
इस पाठ को Kodokon में खोलेंआप पहले से ही लूप और शर्तें लिखना जानते हैं; अब समय है अपने कोड को संरचित करने का। एक फ़ंक्शन किसी विशिष्ट कार्य को एक स्पष्ट नाम के पीछे अलग कर देता है: आप इसे एक बार लिखते हैं, एक बार परखते हैं, और हर जगह कॉल करते हैं। def फ़ंक्शन घोषित करता है, पैरामीटर इनपुट वैल्यू प्राप्त करते हैं और return परिणाम को कॉल करने वाले के पास वापस भेजता है। एक बात याद रखें जिसे अक्सर अनदेखा किया जाता है: बिना return वाला फ़ंक्शन None लौटाता है।
def net_price(price, tax_rate):
total = price * (1 + tax_rate)
return round(total, 2)
result = net_price(100, 0.2)
print(result) # 120.0डिफ़ॉल्ट वैल्यू किसी फ़ंक्शन को कई रूपांतर बनाए बिना लचीला बनाती हैं: इन्हें आवश्यक पैरामीटरों के बाद घोषित करें। कॉल करते समय, कीवर्ड आर्गुमेंट (currency="USD") आपके इरादे को दस्तावेज़ित करते हैं। पेशेवर कोड में, जैसे ही किसी फ़ंक्शन में दो से अधिक पैरामीटर होते हैं, आप इनका उपयोग करते हैं: कॉल परिभाषा खोले बिना ही स्पष्ट रूप से पढ़ी जाती है।
def format_price(amount, currency="EUR", digits=2):
return f"{amount:.{digits}f} {currency}"
print(format_price(19.9)) # 19.90 EUR
print(format_price(19.9, currency="USD")) # 19.90 USD
print(format_price(19.9, digits=0)) # 20 EURdef add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item("pen")) # ['pen']
print(add_item("book")) # ['book']स्कोप यह निर्धारित करता है कि कोई वेरिएबल कहाँ मौजूद है। किसी फ़ंक्शन के अंदर बनाया गया वेरिएबल लोकल होता है: कॉल समाप्त होते ही वह गायब हो जाता है। एक फ़ंक्शन किसी ग्लोबल वेरिएबल को पढ़ सकता है, लेकिन कोई भी असाइनमेंट एक नया लोकल वेरिएबल बना देता है - ग्लोबल अछूता रहता है। अच्छी आदत: ग्लोबल वेरिएबल बदलने के बजाय, पैरामीटर पास करें और परिणाम लौटाएँ; आपका कोड पूर्वानुमेय और परखने योग्य बन जाता है।
rate = 0.2
def apply_tax(price):
return round(price * (1 + rate), 2)
def set_rate(new_rate):
rate = new_rate # local variable, no effect
print(apply_tax(100)) # 120.0
set_rate(0.1)
print(apply_tax(100)) # 120.0, the global is untouched