مرکزی مواد پر جائیں
ماڈیول 5 · سبق 3 از 4کورس میں 19/36~12 min
ماڈیول اسباق (3/4)

*args اور **kwargs

بعض اوقات آپ ایک ایسا فنکشن چاہتے ہیں جو متغیر نمبر کو قبول کرے۔ دلائل ازگر آپ کو دو ٹولز دیتا ہے: *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} ہے۔

ہر چیز کو ملانا

مقررہ ترتیب یہ ہے: **باقاعدہ پیرامیٹرز، **args، ڈیفالٹ پیرامیٹرز، **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. پوزیشنی ورارگز *args۔
  3. پہلے سے طے شدہ اقدار کے ساتھ مطلوبہ الفاظ کے پیرامیٹرز۔
  4. مطلوبہ الفاظ کے varargs **kwargs.

اسے آزمائیں

ورزش#python.m5.l3.e1
کوششیں: 0لوڈ ہو رہا ہے…

'اوسط (*نمبر)' کی وضاحت کریں جو ریاضی کا مطلب (مجموعہ / شمار) لوٹاتا ہے۔ اسے 10، 20، 30 کے ساتھ کال کریں اور نتیجہ `m` کو تفویض کریں۔ `m` کا اندازہ لگائیں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

sum(nums) / len(nums)

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m5.l3.e2
کوششیں: 0لوڈ ہو رہا ہے…

فنکشن `def پوائنٹ(x, y, z) کو دیکھتے ہوئے: x + y + z` واپس کریں اور dict `coords = {'x': 1, 'y': 2, 'z': 3}`، coords کو کھولیں اور نتیجہ کو `s` کو تفویض کریں۔ `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 کوششوں کے بعد حل دستیاب ہے۔