मॉड्यूल पाठ (3/4)
*आर्ग्स और **क्वार्ग्स
कभी-कभी आप एक ऐसा फ़ंक्शन चाहते हैं जो परिवर्तनीय संख्या को स्वीकार करता हो
तर्क. पायथन आपको दो उपकरण देता है: *args (स्थितीय तर्क एकत्र करता है
एक टुपल में) और **kwargs (कीवर्ड तर्कों को एक निर्देश में एकत्रित करता है)।
*args: परिवर्तनीय स्थितीय तर्क
def somma_tutto(*nums):
totale = 0
for n in nums:
totale += n
return totale
somma_tutto(1, 2, 3) # 6
somma_tutto(1, 2, 3, 4, 5) # 15
somma_tutto() # 0फ़ंक्शन के अंदर, nums एक टुपल है जिसमें सभी मान पास हो गए हैं। द
नाम सिर्फ एक परिपाटी है: *args सबसे आम है, लेकिन *nums या
*valori पूर्णतः मान्य हैं।
**kwargs: परिवर्तनीय कीवर्ड तर्क
def crea_config(**opzioni):
return opzioni
crea_config(debug=True, port=8080)
# {'debug': True, 'port': 8080}फ़ंक्शन के अंदर, opzioni {param_name: value} के साथ एक तानाशाह है।
हर चीज़ को मिलाना
निश्चित क्रम है: **नियमित पैरामीटर, *आर्ग, डिफ़ॉल्ट पैरामीटर, **kwargs**।
def f(primo, *args, opzione="x", **kwargs):
print(primo, args, opzione, kwargs)
f(1, 2, 3, opzione="y", extra=10)
# 1 (2, 3) y {'extra': 10}कॉल में अनपैकिंग: * और **
वही ऑपरेटर दूसरे तरीके से काम करता है: किसी सूची/ट्यूपल को "विस्फोट" करने के लिए स्थितीय तर्कों में या कीवर्ड तर्कों में एक निर्देश।
def punto(x, y, z):
return (x, y, z)
coords = [1, 2, 3]
punto(*coords) # punto(1, 2, 3) → (1, 2, 3)
opts = {"x": 1, "y": 2, "z": 3}
punto(**opts) # punto(x=1, y=2, z=3)आवरण पैटर्न
def log_chiamata(fn, *args, **kwargs):
print(f"chiamo {fn.__name__} con {args=} {kwargs=}")
return fn(*args, **kwargs)
log_chiamata(max, 3, 1, 2) # calls max(3, 1, 2)
log_chiamata(sorted, [3, 1, 2], reverse=True)फ़ंक्शन हस्ताक्षरों में पैरामीटर क्रम
एकाधिक तर्क प्रकारों को स्वीकार करने वाले फ़ंक्शन को परिभाषित करते समय, आपको हस्ताक्षर में एक सख्त आदेश का पालन करना होगा:
- मानक स्थितीय पैरामीटर।
- स्थितीय varargs
*args। - डिफ़ॉल्ट मानों के साथ कीवर्ड पैरामीटर।
- कीवर्ड varargs
**kwargs।
इसे अजमाएं
`औसत(*अंक)` को परिभाषित करें जो अंकगणितीय माध्य (योग/गणना) लौटाता है। इसे 10, 20, 30 के साथ कॉल करें और परिणाम को `एम` पर निर्दिष्ट करें। `एम` का मूल्यांकन करें.
संकेत दिखाएँ
योग(अंक) / लेन(अंक)
3 प्रयासों के बाद समाधान उपलब्ध है
व्यायाम की समीक्षा करें
फ़ंक्शन `डिफ़ पॉइंट (x, y, z): रिटर्न x + y + z` और निर्देश `कोर्ड्स = {'x': 1, 'y': 2, 'z': 3}` को देखते हुए, पॉइंट अनपैकिंग कोर्ड्स को कॉल करें और परिणाम को `s` पर असाइन करें। 'एस' का मूल्यांकन करें.
संकेत दिखाएँ
बिंदु(**निर्देशांक)
3 प्रयासों के बाद समाधान उपलब्ध है
अतिरिक्त चुनौती
Write a function `multiply_all(*args)` that returns the product of all numbers passed as arguments. If no arguments are passed, it should return `1`. Finally, evaluate the call `multiply_all(2, 3, 4)`.
संकेत दिखाएँ
आर्ग में तत्वों पर पुनरावृति करने और उनके उत्पाद को संचित करने के लिए फॉर लूप का उपयोग करें।
3 प्रयासों के बाद समाधान उपलब्ध है