मुख्य सामग्री पर जाएं
मॉड्यूल 5 · पाठ 3 का 4पाठ्यक्रम में 19/36~12 min
मॉड्यूल पाठ (3/4)

*आर्ग्स और **क्वार्ग्स

कभी-कभी आप एक ऐसा फ़ंक्शन चाहते हैं जो परिवर्तनीय संख्या को स्वीकार करता हो तर्क. पायथन आपको दो उपकरण देता है: *args (स्थितीय तर्क एकत्र करता है एक टुपल में) और **kwargs (कीवर्ड तर्कों को एक निर्देश में एकत्रित करता है)।

*args: परिवर्तनीय स्थितीय तर्क

Python
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: परिवर्तनीय कीवर्ड तर्क

Python
def crea_config(**opzioni):
    return opzioni

crea_config(debug=True, port=8080)
# {'debug': True, 'port': 8080}

फ़ंक्शन के अंदर, opzioni {param_name: value} के साथ एक तानाशाह है।

हर चीज़ को मिलाना

निश्चित क्रम है: **नियमित पैरामीटर, *आर्ग, डिफ़ॉल्ट पैरामीटर, **kwargs**।

Python
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}

कॉल में अनपैकिंग: * और **

वही ऑपरेटर दूसरे तरीके से काम करता है: किसी सूची/ट्यूपल को "विस्फोट" करने के लिए स्थितीय तर्कों में या कीवर्ड तर्कों में एक निर्देश।

Python
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)

आवरण पैटर्न

Python
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)

फ़ंक्शन हस्ताक्षरों में पैरामीटर क्रम

एकाधिक तर्क प्रकारों को स्वीकार करने वाले फ़ंक्शन को परिभाषित करते समय, आपको हस्ताक्षर में एक सख्त आदेश का पालन करना होगा:

  1. मानक स्थितीय पैरामीटर।
  2. स्थितीय varargs *args।
  3. डिफ़ॉल्ट मानों के साथ कीवर्ड पैरामीटर।
  4. कीवर्ड varargs **kwargs।

इसे अजमाएं

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

`औसत(*अंक)` को परिभाषित करें जो अंकगणितीय माध्य (योग/गणना) लौटाता है। इसे 10, 20, 30 के साथ कॉल करें और परिणाम को `एम` पर निर्दिष्ट करें। `एम` का मूल्यांकन करें.

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

योग(अंक) / लेन(अंक)

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

व्यायाम की समीक्षा करें

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

फ़ंक्शन `डिफ़ पॉइंट (x, y, z): रिटर्न x + y + z` और निर्देश `कोर्ड्स = {'x': 1, 'y': 2, 'z': 3}` को देखते हुए, पॉइंट अनपैकिंग कोर्ड्स को कॉल करें और परिणाम को `s` पर असाइन करें। 'एस' का मूल्यांकन करें.

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

बिंदु(**निर्देशांक)

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

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

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

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 प्रयासों के बाद समाधान उपलब्ध है