✅ args in Python
argslets a function accept a variable number of positional arguments. These are collected into a tuple, making your function more flexible.
def total(*numbers):
return sum(numbers)
print(total(10, 20, 30)) # Output: 60🔍 Key Points:
Useful when the number of arguments isn’t fixed.
Internally stored as a tuple.
argsis a convention—you can name it anything.Must appear after regular parameters in the function definition.
✅ *kwargs in Python
*kwargslets a function accept any number of keyword arguments. These are packed into a dictionary.
def display_info(**info):
for key, value in info.items():
print(f"{key} : {value}")
display_info(name="Bob", age=25)🔍 Key Points:
Stores named arguments as a dictionary.
Allows dynamic handling of inputs with keys.
kwargsis the convention—you can rename it.Must come after regular parameters and
args.
<div class="infographic-pyargs">
<style>
.infographic-pyargs {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--c-kw: #7c3aed; --c-kw-soft: #ede9fe;
--c-name: #2563eb; --c-name-soft: #e3ebfd;
--c-args: #2563eb; --c-args-soft: #e3ebfd;
--c-kwargs: #b45309; --c-kwargs-soft: #fdf0dc;
--mono-font: 'IBM Plex Mono', 'SFMono-Regular', Menlo, monospace;
--display-font: 'Fraunces', Georgia, serif;
--body-font: 'Inter', system-ui, sans-serif;
box-sizing: border-box;
max-width: 760px;
margin: 0 auto;
font-family: var(--body-font);
color: var(--ink);
background: var(--paper);
}
.infographic-pyargs[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--c-kw: #a78bfa; --c-kw-soft: #2c2140;
--c-name: #5b8def; --c-name-soft: #202942;
--c-args: #5b8def; --c-args-soft: #202942;
--c-kwargs: #e0a458; --c-kwargs-soft: #3a2c14;
}
.infographic-pyargs *, .infographic-pyargs *::before, .infographic-pyargs *::after { box-sizing: border-box; }
.infographic-pyargs .pa-wrap { padding: 0 clamp(1rem, 4vw, 2rem) 1.5rem; }
.infographic-pyargs h1 {
font-family: var(--display-font); font-weight: 600;
font-size: clamp(1.5rem, 5vw, 2.05rem); text-align: center; margin: 1.5rem 0 0.25rem; letter-spacing: -0.01em;
}
.infographic-pyargs .pa-sub { text-align: center; color: var(--ink-soft); font-size: 0.86rem; margin: 0 0 1.5rem; }
/* anatomy line */
.infographic-pyargs .code-line {
font-family: var(--mono-font); font-size: clamp(0.9rem, 3.2vw, 1.08rem);
text-align: center; background: var(--paper-alt); border: 1px solid var(--line);
padding: 1.1rem 1rem; line-height: 1.8; margin-bottom: 0.8rem;
}
.infographic-pyargs .part { padding: 0.12rem 0.28rem; border-radius: 4px; }
.infographic-pyargs .part.kw { color: var(--c-kw); font-weight: 700; }
.infographic-pyargs .part.name { color: var(--c-name); font-weight: 700; }
.infographic-pyargs .part.args-tok { color: var(--c-args); font-weight: 700; background: var(--c-args-soft); border-radius: 4px; }
.infographic-pyargs .part.kwargs-tok { color: var(--c-kwargs); font-weight: 700; background: var(--c-kwargs-soft); border-radius: 4px; }
.infographic-pyargs .legend-row { display: flex; justify-content: center; gap: 0.6rem; margin-bottom: 1.6rem; flex-wrap: wrap; }
.infographic-pyargs .legend-chip {
display: flex; align-items: center; gap: 0.35rem; font-size: 0.75rem; color: var(--ink-soft);
border: 1px solid var(--line); border-radius: 999px; padding: 0.3rem 0.7rem;
}
.infographic-pyargs .legend-dot { width: 9px; height: 9px; border-radius: 50%; }
/* builder */
.infographic-pyargs .builder-section { margin-bottom: 1.1rem; }
.infographic-pyargs .builder-label {
font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700; margin-bottom: 0.5rem; text-align: center;
}
.infographic-pyargs .builder-label.args-c { color: var(--c-args); }
.infographic-pyargs .builder-label.kwargs-c { color: var(--c-kwargs); }
.infographic-pyargs .chip-row { display: flex; flex-wrap: wrap; gap: 0.4rem; justify-content: center; margin-bottom: 0.6rem; min-height: 40px; align-items: center; }
.infographic-pyargs .arg-chip {
display: flex; align-items: center; gap: 0.35rem; padding: 0.35rem 0.5rem;
background: var(--c-args-soft); border: 1.5px solid var(--c-args); border-radius: 999px;
font-family: var(--mono-font); font-size: 0.8rem; color: var(--c-args); font-weight: 700;
animation: pa-pop-in 0.25s ease;
}
.infographic-pyargs .kwarg-chip {
display: flex; align-items: center; gap: 0.35rem; padding: 0.35rem 0.5rem;
background: var(--c-kwargs-soft); border: 1.5px solid var(--c-kwargs); border-radius: 999px;
font-family: var(--mono-font); font-size: 0.8rem; color: var(--c-kwargs); font-weight: 700;
animation: pa-pop-in 0.25s ease;
}
@keyframes pa-pop-in { from { opacity: 0; transform: scale(0.7); } to { opacity: 1; transform: scale(1); } }
.infographic-pyargs .chip-remove {
cursor: pointer; font-weight: 700; opacity: 0.6; border: none; background: none; color: inherit; font-size: 0.85rem; line-height: 1; padding: 0;
}
.infographic-pyargs .chip-remove:hover { opacity: 1; }
.infographic-pyargs .add-row { display: flex; justify-content: center; gap: 0.4rem; flex-wrap: wrap; margin-bottom: 1.2rem; }
.infographic-pyargs .add-row input {
font-family: var(--mono-font); font-size: 0.8rem; padding: 0.35rem 0.5rem;
border: 1px solid var(--line); border-radius: 5px; background: var(--paper-alt); color: var(--ink); width: 100px;
}
.infographic-pyargs .add-row input:focus { outline: none; border-color: var(--accent); }
.infographic-pyargs .add-btn {
font: inherit; font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700;
background: var(--paper); border: 1.5px dashed var(--line); color: var(--ink-soft);
padding: 0.35rem 0.7rem; cursor: pointer; border-radius: 5px;
}
.infographic-pyargs .add-btn:hover { border-color: var(--accent); color: var(--accent); }
.infographic-pyargs .call-preview {
text-align: center; font-family: var(--mono-font); font-size: 0.9rem; color: var(--ink);
background: var(--paper-alt); border: 1px solid var(--line); border-radius: 8px;
padding: 0.7rem 0.9rem; margin: 1.2rem 0; word-break: break-word;
}
.infographic-pyargs .call-preview .args-c { color: var(--c-args); }
.infographic-pyargs .call-preview .kwargs-c { color: var(--c-kwargs); }
.infographic-pyargs .call-btn {
font: inherit; font-size: 0.85rem; font-weight: 700; border: none; background: var(--accent);
color: #fff; padding: 0.55rem 1.3rem; border-radius: 999px; cursor: pointer; margin: 0 auto 1.2rem;
display: block;
}
/* result boxes */
.infographic-pyargs .result-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.8rem; }
@media (max-width: 560px) { .infographic-pyargs .result-grid { grid-template-columns: 1fr; } }
.infographic-pyargs .result-box {
border: 2px solid var(--line); border-radius: 10px; padding: 0.8rem 0.9rem; text-align: center;
opacity: 0.4; transition: opacity 0.3s, border-color 0.3s, background 0.3s;
}
.infographic-pyargs .result-box.is-revealed { opacity: 1; }
.infographic-pyargs .result-box.args-box.is-revealed { border-color: var(--c-args); background: var(--c-args-soft); }
.infographic-pyargs .result-box.kwargs-box.is-revealed { border-color: var(--c-kwargs); background: var(--c-kwargs-soft); }
.infographic-pyargs .result-title { font-family: var(--mono-font); font-size: 0.75rem; font-weight: 700; color: var(--ink-soft); margin-bottom: 0.4rem; }
.infographic-pyargs .result-box.args-box.is-revealed .result-title { color: var(--c-args); }
.infographic-pyargs .result-box.kwargs-box.is-revealed .result-title { color: var(--c-kwargs); }
.infographic-pyargs .result-value { font-family: var(--mono-font); font-size: 0.85rem; font-weight: 700; color: var(--ink); word-break: break-word; }
.infographic-pyargs .result-type { font-size: 0.68rem; color: var(--ink-soft); margin-top: 0.3rem; }
.infographic-pyargs .pa-note { text-align: center; font-size: 0.8rem; color: var(--ink-soft); margin-top: 1.2rem; }
@media (prefers-reduced-motion: reduce) {
.infographic-pyargs *, .infographic-pyargs *::before, .infographic-pyargs *::after {
animation-duration: 0.001ms !important; transition-duration: 0.001ms !important;
}
}
</style>
<div class="pa-wrap">
<h1>*args and **kwargs</h1>
<p class="pa-sub">Catch any number of extra arguments — positional or named.</p>
<div class="code-line">
<span class="part kw">def</span>
<span class="part name">greet</span>(<span class="part args-tok">*args</span>, <span class="part kwargs-tok">**kwargs</span>):
</div>
<div class="legend-row">
<span class="legend-chip"><span class="legend-dot" style="background:var(--c-args)"></span>*args → a tuple of extra positional values</span>
<span class="legend-chip"><span class="legend-dot" style="background:var(--c-kwargs)"></span>**kwargs → a dict of extra keyword=value pairs</span>
</div>
<div class="builder-section">
<div class="builder-label args-c">positional arguments</div>
<div class="chip-row" id="argsChipRow"></div>
<div class="add-row">
<input id="newArgInput" type="text" placeholder="value" />
<button class="add-btn" id="addArgBtn">+ add arg</button>
</div>
</div>
<div class="builder-section">
<div class="builder-label kwargs-c">keyword arguments</div>
<div class="chip-row" id="kwargsChipRow"></div>
<div class="add-row">
<input id="newKwKeyInput" type="text" placeholder="key" style="width:80px" />
<input id="newKwValInput" type="text" placeholder="value" />
<button class="add-btn" id="addKwargBtn">+ add kwarg</button>
</div>
</div>
<div class="call-preview" id="callPreview"></div>
<button class="call-btn" id="callBtn">Call it</button>
<div class="result-grid">
<div class="result-box args-box" id="argsResultBox">
<div class="result-title">args</div>
<div class="result-value" id="argsResultValue">(...)</div>
<div class="result-type">tuple</div>
</div>
<div class="result-box kwargs-box" id="kwargsResultBox">
<div class="result-title">kwargs</div>
<div class="result-value" id="kwargsResultValue">{...}</div>
<div class="result-type">dict</div>
</div>
</div>
<p class="pa-note">Inside the function, args[0] and kwargs["key"] work exactly like a normal tuple and dict.</p>
</div>
<script>
(function () {
var root = document.currentScript.closest('.infographic-pyargs')
|| document.querySelector('.infographic-pyargs');
var bodyAttr = document.body.getAttribute('data-darkmode');
var dark;
if (bodyAttr === 'true') { dark = true; }
else if (bodyAttr === 'false') { dark = false; }
else {
var match = document.cookie.match(/(?:^|;\s*)darkMode=([^;]+)/);
dark = match ? match[1] === 'true' : false;
}
if (dark) root.setAttribute('data-theme', 'dark');
var positional = ['"Alice"', '"Bob"'];
var keyword = [{ k: 'age', v: '25' }, { k: 'city', v: '"NYC"' }];
var argsChipRow = root.querySelector('#argsChipRow');
var kwargsChipRow = root.querySelector('#kwargsChipRow');
var callPreview = root.querySelector('#callPreview');
var argsResultBox = root.querySelector('#argsResultBox');
var kwargsResultBox = root.querySelector('#kwargsResultBox');
var argsResultValue = root.querySelector('#argsResultValue');
var kwargsResultValue = root.querySelector('#kwargsResultValue');
var callBtn = root.querySelector('#callBtn');
function renderChips() {
argsChipRow.innerHTML = '';
positional.forEach(function (v, i) {
var chip = document.createElement('span');
chip.className = 'arg-chip';
chip.innerHTML = '<span>' + v + '</span>';
var rm = document.createElement('button');
rm.className = 'chip-remove';
rm.textContent = '×';
rm.addEventListener('click', function () { positional.splice(i, 1); renderAll(); });
chip.appendChild(rm);
argsChipRow.appendChild(chip);
});
kwargsChipRow.innerHTML = '';
keyword.forEach(function (pair, i) {
var chip = document.createElement('span');
chip.className = 'kwarg-chip';
chip.innerHTML = '<span>' + pair.k + '=' + pair.v + '</span>';
var rm = document.createElement('button');
rm.className = 'chip-remove';
rm.textContent = '×';
rm.addEventListener('click', function () { keyword.splice(i, 1); renderAll(); });
chip.appendChild(rm);
kwargsChipRow.appendChild(chip);
});
}
function renderPreview() {
var parts = positional.slice();
keyword.forEach(function (p) { parts.push(p.k + '=' + p.v); });
var argsHtml = positional.map(function (v) { return '<span class="args-c">' + v + '</span>'; });
var kwargsHtml = keyword.map(function (p) { return '<span class="kwargs-c">' + p.k + '=' + p.v + '</span>'; });
var allHtml = argsHtml.concat(kwargsHtml).join(', ');
callPreview.innerHTML = 'greet(' + allHtml + ')';
}
function renderAll() {
renderChips();
renderPreview();
argsResultBox.classList.remove('is-revealed');
kwargsResultBox.classList.remove('is-revealed');
}
root.querySelector('#addArgBtn').addEventListener('click', function () {
var input = root.querySelector('#newArgInput');
var v = input.value.trim();
if (!v) return;
var isNumeric = /^-?\d+(\.\d+)?$/.test(v);
positional.push(isNumeric ? v : '"' + v + '"');
input.value = '';
renderAll();
});
root.querySelector('#addKwargBtn').addEventListener('click', function () {
var kInput = root.querySelector('#newKwKeyInput');
var vInput = root.querySelector('#newKwValInput');
var k = kInput.value.trim();
var v = vInput.value.trim();
if (!k || !v) return;
var isNumeric = /^-?\d+(\.\d+)?$/.test(v);
keyword.push({ k: k, v: isNumeric ? v : '"' + v + '"' });
kInput.value = '';
vInput.value = '';
renderAll();
});
callBtn.addEventListener('click', function () {
argsResultValue.textContent = '(' + positional.join(', ') + (positional.length === 1 ? ',' : '') + ')';
kwargsResultValue.textContent = '{' + keyword.map(function (p) { return '"' + p.k + '": ' + p.v; }).join(', ') + '}';
argsResultBox.classList.remove('is-revealed');
kwargsResultBox.classList.remove('is-revealed');
void argsResultBox.offsetWidth;
setTimeout(function () { argsResultBox.classList.add('is-revealed'); }, 60);
setTimeout(function () { kwargsResultBox.classList.add('is-revealed'); }, 220);
});
renderAll();
})();
</script>
</div>🧠 Quick Summary
Feature |
|
|
|---|---|---|
Type | Tuple | Dictionary |
Usage | Positional arguments | Keyword arguments |
Access | Loop with | Loop with |
💡 Real-Life Analogy
🛵 Ordering Food Online
args→ Just dishes:"Pizza", "Burger", "Pasta"*kwargs→ Labeled preferences:spicy=True, extra_cheese=True