1.2.29 · D2 · HinglishIntroduction to Programming (Python)

Visual walkthrough` - args` and ` - kwargs` — flexible argument passing

697 words3 min read↑ Read in English

1.2.29 · D2 · Coding › Introduction to Programming (Python) › [[1.2.29 - args and - kwargs — flexible argument passing| - args and - kwargs — flexible argument passing]]

Hum sirf ek cheez assume karte hain: aap jaante ho ki ek function ek machine hai jisme aap values daalogte ho, jaise add(2, 3). Baaki sab hum yahan se build karte hain.


Step 1 — Ek function labelled buckets ka ek set hota hai

KYA. Jab aap def add(a, b): likhte ho, to aap do named buckets bana rahe ho, a aur b. Jab aap add(2, 3) call karte ho, Python values ko buckets mein left to right daalta hai: 2 ko a mein, 3 ko b mein.

YAHAN SE KYUN SHURU KAREIN. Aage jo bhi aayega woh sab isi daalne ki idea hai — hum sirf ek special bucket add karne wale hain jo koi bhi amount hold kar sakta hai. Yeh kyun useful hai yeh dekhne se pehle, pehle is rigidity ko feel karo: do buckets ka matlab exactly do values, na zyada na kam.

PICTURE. Call values (upar) exactly unhi buckets mein girti hain jo position se match karti hain.

Figure — ` - args` and ` - kwargs` — flexible argument passing
Caption: upar add(2, 3) ka call; ek arrow 2 ko neeche a label wale bucket mein le jaata hai aur 3 ko b label wale bucket mein. Neeche, ek red note humein yaad dilata hai ki add(2, 3, 4) ke paas teesra bucket nahi hai aur yeh TypeError raise karta hai.

Us line ko plain words mein padho: machine add ko 2 milta hai (jo bucket a mein flow karta hai) aur 3 milta hai (jo bucket b mein flow karta hai).

  • 2pehli positional value, isliye pehle bucket a mein jaati hai.
  • 3doosri positional value, doosre bucket b mein jaati hai.

Agar aap ab add(2, 3, 4) try karo, toh 4 ke liye koi teesra bucket nahi hota → Python TypeError raise karta hai. Wahi failure hai jo *args solve karta hai.


Step 2 — * ek stretchy bucket kholti hai

KYA. def add(*args): likhne se ek bucket banta hai jiska naam args hai aur saamne * hai. * ka matlab hai: "har bacha hua positional value pakad aur mujhme stack kar do." Jo stack banta hai woh ek tuple hota hai.

* kyun, koi aur naam kyun nahi? Ek plain naam (args) ek slot hoga jo ek value hold karta. * woh operator hai jo use ek catch-all mein upgrade kar deta hai: chahe kitni bhi values aayein, sab fit ho jaati hain. Yahi exact tool chahiye tha "main nahi jaanta kitne inputs aayenge" ke liye.

PICTURE. Teen values girti hain, lekin teen alag-alag buckets mein girne ki bajaye, sab ek wide container mein jaati hain aur ek tuple (2, 3 ban jaata hai.