π Keywords
Keywords are reserved words in Python that have a special meaning.
Examples:
if
else
for
while
def
class
return
import
True
False
None
and
or
notYou cannot use keywords as variable or function names.
if = 10 # β InvalidYou can check Python's keywords using:
import keyword
print(keyword.kwlist) ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue',
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in',
'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']π·οΈ Identifiers
Identifiers are names given by the programmer to variables, functions, classes, etc.
name = "Tisha"
age = 23
def greet():
print("Hello")Here, name, age, and greet are identifiers.
Rules for Identifiers
β
Can contain letters, numbers and _
student_name
student123β Cannot start with a number
123student # Invalidβ Cannot contain spaces or special characters
student name # Invalid
student-name # Invalidβ Cannot be a keyword
class = 10 # Invalidπ Identifiers are case-sensitive:
name = "Tisha"
Name = "Rahul"name and Name are different identifiers.
βοΈ Keywords vs Identifiers
Keywords π | Identifiers π·οΈ |
|---|---|
Reserved by Python | Created by the programmer |
Have a special meaning | Used to name things |
Cannot be used as variable names | Used for variables, functions, classes, etc. |
|
|
β Remember
Keyword = Python's reserved word
Identifier = Programmer's name
<div class="infographic-pykw">
<style>
.infographic-pykw {
--ink: #1a1a1a;
--ink-soft: #5c5c5c;
--paper: #ffffff;
--paper-alt: #f0ece4;
--accent: #2563eb;
--accent-soft:#e3ebfd;
--line: #ddd6c9;
--ok: #1f9d55; --ok-soft: #e3f5ec;
--err: #c0392b; --err-soft: #fbe9e7;
--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: 820px;
margin: 0 auto;
font-family: var(--body-font);
color: var(--ink);
background: var(--paper);
}
.infographic-pykw[data-theme="dark"] {
--ink: #e8e6e1;
--ink-soft: #9a968c;
--paper: #121212;
--paper-alt: #1e1e26;
--accent: #5b8def;
--accent-soft:#202942;
--line: #2c313d;
--ok: #6fdc8c; --ok-soft: #16342a;
--err: #e57373; --err-soft: #3a2222;
}
.infographic-pykw *, .infographic-pykw *::before, .infographic-pykw *::after { box-sizing: border-box; }
.infographic-pykw .kw-wrap { padding: 0 clamp(1rem, 4vw, 2rem) 1.5rem; }
.infographic-pykw 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-pykw .kw-sub { text-align: center; color: var(--ink-soft); font-size: 0.86rem; margin: 0 0 1.4rem; }
.infographic-pykw .kw-tabs { display: flex; justify-content: center; gap: 0.4rem; margin-bottom: 1.5rem; border-bottom: 1px solid var(--line); flex-wrap: wrap; }
.infographic-pykw .kw-tab-btn {
font: inherit; font-family: var(--mono-font); font-size: 0.8rem; font-weight: 700;
background: none; border: none; border-bottom: 2.5px solid transparent; color: var(--ink-soft);
padding: 0.55rem 0.8rem; cursor: pointer; margin-bottom: -1px;
}
.infographic-pykw .kw-tab-btn.is-active { color: var(--accent); border-bottom-color: var(--accent); }
.infographic-pykw .kw-panel.is-hidden-tab { display: none; }
/* identifier checker */
.infographic-pykw .id-input-row { display: flex; justify-content: center; margin-bottom: 1rem; }
.infographic-pykw .id-input {
font-family: var(--mono-font); font-size: 1.1rem; text-align: center; font-weight: 700;
padding: 0.55rem 0.9rem; border: 2px solid var(--line); border-radius: 8px;
background: var(--paper-alt); color: var(--ink); width: 260px;
}
.infographic-pykw .id-input:focus { outline: none; border-color: var(--accent); }
.infographic-pykw .name-display {
text-align: center; font-family: var(--mono-font); font-size: 1.6rem; font-weight: 700;
margin-bottom: 0.8rem; min-height: 2.2rem; letter-spacing: 0.02em;
}
.infographic-pykw .ch { transition: background 0.15s, color 0.15s; border-radius: 3px; padding: 0 0.02em; }
.infographic-pykw .ch.ok { color: var(--ink); }
.infographic-pykw .ch.bad { color: var(--err); background: var(--err-soft); }
.infographic-pykw .status-row { display: flex; justify-content: center; margin-bottom: 0.4rem; }
.infographic-pykw .status-badge {
display: inline-flex; align-items: center; gap: 0.5rem;
font-family: var(--display-font); font-size: 1.15rem; font-weight: 600;
padding: 0.4rem 1rem; border-radius: 999px; border: 2px solid transparent;
}
.infographic-pykw .status-badge.valid { background: var(--ok-soft); color: var(--ok); border-color: var(--ok); }
.infographic-pykw .status-badge.invalid { background: var(--err-soft); color: var(--err); border-color: var(--err); }
.infographic-pykw .status-reason { text-align: center; font-size: 0.85rem; color: var(--ink-soft); margin-bottom: 1.3rem; min-height: 1.3em; }
.infographic-pykw .try-label { text-align: center; font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--ink-soft); margin-bottom: 0.5rem; }
.infographic-pykw .try-row { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem; margin-bottom: 1rem; }
.infographic-pykw .try-chip {
font: inherit; font-family: var(--mono-font); font-size: 0.78rem; font-weight: 700;
background: var(--paper-alt); border: 1.5px solid var(--line); color: var(--ink-soft);
padding: 0.3rem 0.65rem; cursor: pointer; border-radius: 999px;
}
.infographic-pykw .try-chip:hover { border-color: var(--accent); color: var(--accent); }
.infographic-pykw .rules-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0.5rem; margin-top: 1rem; }
@media (max-width: 560px) { .infographic-pykw .rules-grid { grid-template-columns: 1fr; } }
.infographic-pykw .rule-card { background: var(--paper-alt); border: 1px solid var(--line); border-radius: 6px; padding: 0.55rem 0.7rem; font-size: 0.78rem; color: var(--ink-soft); }
.infographic-pykw .rule-card strong { color: var(--ink); }
/* keyword grid */
.infographic-pykw .kw-group { margin-bottom: 1.2rem; }
.infographic-pykw .kw-group-title {
font-family: var(--mono-font); font-size: 0.72rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em;
margin-bottom: 0.5rem; text-align: center;
}
.infographic-pykw .kw-chip-row { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem; }
.infographic-pykw .kw-chip {
font: inherit; font-family: var(--mono-font); font-size: 0.8rem; font-weight: 700;
border: 1.5px solid; border-radius: 6px; padding: 0.35rem 0.6rem; cursor: pointer; background: var(--paper);
transition: transform 0.15s;
}
.infographic-pykw .kw-chip.is-selected { transform: translateY(-2px); }
.infographic-pykw .kw-desc {
text-align: center; font-family: var(--mono-font); font-size: 0.88rem; font-weight: 700; color: var(--accent);
margin: 1rem 0 0.2rem; min-height: 1.3em;
}
.infographic-pykw .kw-desc-sub { text-align: center; font-size: 0.8rem; color: var(--ink-soft); min-height: 1.2em; }
@media (prefers-reduced-motion: reduce) {
.infographic-pykw *, .infographic-pykw *::before, .infographic-pykw *::after {
animation-duration: 0.001ms !important; transition-duration: 0.001ms !important;
}
}
</style>
<div class="kw-wrap">
<h1>Keywords & Identifiers</h1>
<p class="kw-sub">Identifiers are names you choose. Keywords are names Python already took.</p>
<div class="kw-tabs">
<button class="kw-tab-btn is-active" data-tab="check">Is it valid?</button>
<button class="kw-tab-btn" data-tab="keywords">The 35 Keywords</button>
</div>
<!-- IDENTIFIER CHECKER TAB -->
<div class="kw-panel" id="tabCheck">
<div class="id-input-row">
<input class="id-input" id="idInput" type="text" value="my_var" spellcheck="false" />
</div>
<div class="name-display" id="nameDisplay"></div>
<div class="status-row"><span class="status-badge valid" id="statusBadge">Valid</span></div>
<p class="status-reason" id="statusReason"></p>
<div class="try-label">Try one</div>
<div class="try-row">
<button class="try-chip" data-try="my_var">my_var</button>
<button class="try-chip" data-try="2fast">2fast</button>
<button class="try-chip" data-try="class">class</button>
<button class="try-chip" data-try="user-name">user-name</button>
<button class="try-chip" data-try="_private">_private</button>
<button class="try-chip" data-try="TOTAL_COUNT">TOTAL_COUNT</button>
<button class="try-chip" data-try="first name">first name</button>
<button class="try-chip" data-try="True">True</button>
</div>
<div class="rules-grid">
<div class="rule-card"><strong>Start</strong> with a letter or underscore β never a digit.</div>
<div class="rule-card"><strong>Then</strong> letters, digits, or underscores β no spaces or symbols.</div>
<div class="rule-card"><strong>Case</strong> matters β age and Age are different names.</div>
<div class="rule-card"><strong>Never</strong> a reserved keyword like if, class, or return.</div>
</div>
</div>
<!-- KEYWORDS TAB -->
<div class="kw-panel is-hidden-tab" id="tabKeywords">
<div id="kwGroups"></div>
<div class="kw-desc" id="kwDesc">if</div>
<div class="kw-desc-sub" id="kwDescSub">Tap any keyword above to see what it does.</div>
</div>
</div>
<script>
(function () {
var root = document.currentScript.closest('.infographic-pykw')
|| document.querySelector('.infographic-pykw');
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');
/* ---------------- tabs ---------------- */
var tabBtns = root.querySelectorAll('.kw-tab-btn');
var panels = { check: root.querySelector('#tabCheck'), keywords: root.querySelector('#tabKeywords') };
tabBtns.forEach(function (btn) {
btn.addEventListener('click', function () {
tabBtns.forEach(function (b) { b.classList.toggle('is-active', b === btn); });
var target = btn.dataset.tab;
Object.keys(panels).forEach(function (key) {
panels[key].classList.toggle('is-hidden-tab', key !== target);
});
});
});
/* ---------------- identifier checker ---------------- */
var KEYWORDS = ['False','None','True','and','as','assert','async','await','break','class',
'continue','def','del','elif','else','except','finally','for','from','global','if',
'import','in','is','lambda','nonlocal','not','or','pass','raise','return','try','while','with','yield'];
var idInput = root.querySelector('#idInput');
var nameDisplay = root.querySelector('#nameDisplay');
var statusBadge = root.querySelector('#statusBadge');
var statusReason = root.querySelector('#statusReason');
function validate(name) {
if (name.length === 0) return { state: 'empty' };
if (/\s/.test(name)) {
var spaceIdx = name.search(/\s/);
return { state: 'invalid', reason: 'Spaces aren\'t allowed β try snake_case or camelCase instead.', badIdx: [spaceIdx] };
}
if (/^[0-9]/.test(name)) {
return { state: 'invalid', reason: 'Identifiers can\'t start with a digit.', badIdx: [0] };
}
var badIdx = [];
for (var i = 0; i < name.length; i++) {
if (!/[A-Za-z0-9_]/.test(name[i])) badIdx.push(i);
}
if (badIdx.length > 0) {
return { state: 'invalid', reason: '"' + name[badIdx[0]] + '" isn\'t allowed β only letters, digits, and _.', badIdx: badIdx };
}
if (KEYWORDS.indexOf(name) !== -1) {
var all = [];
for (var j = 0; j < name.length; j++) all.push(j);
return { state: 'invalid', reason: '"' + name + '" is a reserved keyword β Python already uses it.', badIdx: all };
}
var note = 'Looks good β ready to use.';
if (name[0] === '_') note = 'Leading underscore is a common convention for "internal use".';
else if (name === name.toUpperCase() && name.length > 1) note = 'ALL_CAPS is the usual convention for constants.';
return { state: 'valid', note: note };
}
function renderCheck() {
var name = idInput.value;
var result = validate(name);
nameDisplay.innerHTML = '';
for (var i = 0; i < name.length; i++) {
var span = document.createElement('span');
var isBad = result.badIdx && result.badIdx.indexOf(i) !== -1;
span.className = 'ch ' + (isBad ? 'bad' : 'ok');
span.textContent = name[i] === ' ' ? '\u00b7' : name[i];
nameDisplay.appendChild(span);
}
if (name.length === 0) nameDisplay.innerHTML = ' ';
if (result.state === 'empty') {
statusBadge.textContent = 'Type a name';
statusBadge.className = 'status-badge invalid';
statusReason.textContent = 'Enter something above to check it.';
} else if (result.state === 'valid') {
statusBadge.textContent = 'Valid identifier';
statusBadge.className = 'status-badge valid';
statusReason.textContent = result.note;
} else {
statusBadge.textContent = 'Not valid';
statusBadge.className = 'status-badge invalid';
statusReason.textContent = result.reason;
}
}
idInput.addEventListener('input', renderCheck);
root.querySelectorAll('.try-chip').forEach(function (chip) {
chip.addEventListener('click', function () {
idInput.value = chip.dataset.try;
renderCheck();
});
});
/* ---------------- keyword reference ---------------- */
var groups = [
{ title: 'Values', color: 'var(--accent)', soft: 'var(--accent-soft)', items: [
['True', 'the boolean value true'],
['False', 'the boolean value false'],
['None', 'represents "nothing" or no value']
]},
{ title: 'Operators', color: '#7c3aed', soft: '#ede9fe', items: [
['and', 'both sides must be true'],
['or', 'either side can be true'],
['not', 'flips true/false'],
['in', 'checks membership: x in list'],
['is', 'checks identity: same object']
]},
{ title: 'Control Flow', color: '#1f9d55', soft: '#e3f5ec', items: [
['if', 'run code only when true'],
['elif', 'else, if this other thing is true'],
['else', 'run when nothing else matched'],
['for', 'loop over a sequence'],
['while', 'loop while a condition holds'],
['break', 'exit a loop immediately'],
['continue', 'skip to the next loop step'],
['pass', 'do nothing β a placeholder']
]},
{ title: 'Functions & Classes', color: '#b45309', soft: '#fdf0dc', items: [
['def', 'define a function'],
['return', 'send a value back from a function'],
['lambda', 'a small, unnamed function'],
['class', 'define a new type of object'],
['global', 'use a variable from outside the function'],
['nonlocal', 'use a variable from an enclosing function']
]},
{ title: 'Exceptions', color: '#c0392b', soft: '#fbe9e7', items: [
['try', 'attempt code that might fail'],
['except', 'handle a specific failure'],
['finally', 'always runs, error or not'],
['raise', 'trigger an error on purpose'],
['assert', 'stop if a condition is false']
]},
{ title: 'Imports', color: '#2563eb', soft: '#e3ebfd', items: [
['import', 'bring in another module'],
['from', 'import specific parts of a module'],
['as', 'give an import a nickname']
]},
{ title: 'Context & Async', color: '#9333ea', soft: '#f3e8fd', items: [
['with', 'auto clean-up, e.g. closing a file'],
['async', 'define a function that can pause'],
['await', 'pause until an async result is ready']
]},
{ title: 'Other', color: '#5c5c5c', soft: '#f0ece4', items: [
['del', 'delete a variable or item'],
['yield', 'pause a function and return a value']
]}
];
var kwGroups = root.querySelector('#kwGroups');
var kwDesc = root.querySelector('#kwDesc');
var kwDescSub = root.querySelector('#kwDescSub');
var allKwChips = [];
groups.forEach(function (group) {
var gDiv = document.createElement('div');
gDiv.className = 'kw-group';
var title = document.createElement('div');
title.className = 'kw-group-title';
title.style.color = group.color;
title.textContent = group.title;
gDiv.appendChild(title);
var row = document.createElement('div');
row.className = 'kw-chip-row';
group.items.forEach(function (item) {
var chip = document.createElement('button');
chip.className = 'kw-chip';
chip.style.borderColor = group.color;
chip.style.color = group.color;
chip.textContent = item[0];
chip.addEventListener('click', function () {
allKwChips.forEach(function (c) { c.el.classList.remove('is-selected'); c.el.style.background = 'var(--paper)'; });
chip.classList.add('is-selected');
chip.style.background = group.soft;
kwDesc.textContent = item[0];
kwDesc.style.color = group.color;
kwDescSub.textContent = item[1];
});
allKwChips.push({ el: chip });
row.appendChild(chip);
});
gDiv.appendChild(row);
kwGroups.appendChild(gDiv);
});
renderCheck();
})();
</script>
</div>