Overview, Timeline, Problems & Solutions
Overview of Python Names and Keywords
What is a name in Python?
A Python name is also called an identifier. A name is a word you use to show a variable, a function, a class, or another object in Python code. A name works like a label you place on a box to show what is inside.
A Python name can use uppercase letters A through Z, lowercase letters a through z, digits 0 through 9, and the underscore character _
. A name cannot begin with a digit. You can use names like player1
, total_score
, or X
. A name like 1st_place
is not allowed because it starts with a digit.
Python names are case-sensitive. The name Name
is different from the name name
. Each one is a separate name in Python.
Python does not set a limit on name length. You can use short names or long names. A short name can help you read and understand code.
Python lets you name a value.
This example shows a valid Python name that identifies a value:
score = 100
The name score
is a valid Python identifier. The name score
stores the value 100
.
What characters can you use in Python names?
A Python name is also called an identifier. A Python identifier can use letters, digits, and the underscore character _
. Within the basic ASCII range, you can use uppercase letters A through Z, lowercase letters a through z, digits 0 through 9, and the underscore character _
. A Python name cannot begin with a digit.
Python 3 also allows Unicode characters. Unicode characters include letters from other alphabets outside the English language. This means you can use characters like α
from the Greek alphabet or Б
from the Cyrillic alphabet, if your Python file uses UTF-8 encoding. UTF-8 is the default encoding in Python.
You cannot use spaces in a Python name. You can use an underscore _
to show a space. For example, a name like max_value
can stand for “max value.”
Python does not allow symbols like @
, $
, &
, or -
in names. These symbols have other meanings in Python code and are not part of valid names.
You can use English letters, digits (after the first character), and the underscore to write Python names.
You can use underscores when naming in Python.
This example shows a valid Python name with an underscore:
max_value = 10
The name max_value
is a valid Python identifier. The underscore connects the two parts of the name. The name max_value
stores the value 10
.
What are Python keywords?
A Python keyword is a special word that has a fixed meaning in the language. Python keeps these words to control how code runs. You cannot use a keyword as a name for a variable, a function, or anything else.
Some common Python keywords are if
, else
, for
, while
, class
, def
, True
, False
, and None
. When Python reads one of these words, it knows the word is part of the code structure. For example, the keyword if
starts a condition. The keyword True
means a truth value.
Python gives you an error when you name a keyword.
Python will not let you assign a value to a keyword. This line will not work:
True = 5
The word True
is a keyword. Using it as a name will cause a syntax error.
Python keywords are case-sensitive. The word True
is a keyword. The word true
is not. You can make a name called true
, but it will not mean the same thing.
There are a few dozen keywords in Python. Some other examples are and
, as
, assert
, break
, continue
, return
, import
, from
, lambda
, with
, try
, except
, finally
, pass
, yield
, in
, is
, not
, and or
.
What are soft keywords in Python?
A soft keyword is a word that works like a keyword only in special situations. In other places, you can use the word as a name.
Python added soft keywords to support new features without blocking names in older code. In Python 3.10, the words match
and case
were added as soft keywords. Inside a match
block, they act like real keywords. Outside that block, they can still be used as names.
You use match and case with Python’s soft keywords.
This example shows how match
and case
work as soft keywords:
match value:
case 1:
print("one")
The word match
starts the block. The word case
checks for a value.
The single underscore _
is also a soft keyword. In a match
block, _
is used as a wildcard. In the Python interpreter, _
holds the last result. Outside those places, you can use _
as a name.
In Python 3.12, the word type
became a soft keyword in pattern matching. You can still use type
as a name outside that use.
Are there special patterns for Python names?
Python uses a few name patterns with special meaning.
A name that starts with one underscore, like _helper
, is meant for internal use. Python skips these names when you write from module import *
.
A name that is only one underscore, _
, is used when the name is not important. For example, in a loop like for _ in range(5):
, you do not use the name, but the loop still runs five times.
A name that starts and ends with two underscores, like __init__
, is used by Python for built-in actions. These are called double-underscore names. You should not make your own names like this unless Python requires them.
A name that starts with two underscores but does not end with two underscores, like __secret
, is changed by Python inside a class. Python adds the class name to it. This prevents name conflicts in subclasses.
Python hides a name when you use double underscores.
This example shows a double-underscore name inside a class:
class Example:
def __init__(self):
self.__secret = 42
The name __secret
will be changed by Python to make it harder to access from outside the class.
Why are names and keywords important to learn in Python?
Python names and Python keywords are the basic parts of the language. A name points to something you create. A keyword controls how code runs.
When you choose a name, you must follow Python rules. When you use a keyword, you must use it the right way. This helps your code work without errors.
Knowing keywords also helps you read code. You know what each part does. You avoid mistakes like using for
as a name.
You loop through values with for
in Python.
This example shows the keyword for
and a name used together:
for number in range(3):
print(number)
The keyword for
starts the loop. The name number
holds each value from the range.
Timeline of Python Names and Keywords
Where do Python’s naming and keyword rules come from?
Python’s names and keywords reflect a long history. Some parts come from programming languages like ALGOL, C, and ABC. Others come from grammar theory and early computing. This timeline shows how Python’s system of names and keywords took shape.
1956 — Phrase structure grammar, Noam Chomsky, gave programming languages formal rules for syntax and naming structure.
1960 — Structured control keywords, ALGOL 60, used clear control words like if
, then
, and begin
, setting patterns for block-based code.
1964 — Long descriptive names, PL/I, introduced naming rules for large programs with business and scientific terms.
1972 — Case-sensitive identifiers, C language, treated Name
and name
as different and used short control keywords like for
and if
.
1980 — Clear syntax and indentation, ABC language, used readable keywords and indentation instead of braces, and shaped Python’s naming and line style.
1989 — Simple keyword set, Guido van Rossum, designed early Python to use indentation and a minimal keyword list inherited from ABC and C.
1991 — Core operators and constants, Python 0.9.0, introduced and
, or
, not
, None
, and used the naming rules still used today.
2000 — New control flow, Python 2.0, added the keyword yield
for generator functions, and later with
for resource cleanup.
2001 — Style rules for names, PEP 8, defined community rules for names like lower_case_with_underscores
and CapWords
.
2008 — Reserved truth values, Python 3.0, turned True
, False
, and None
into keywords and allowed Unicode in names with PEP 3131.
2015 — Async syntax, Python 3.5, added async
and await
to support asynchronous programming using new keywords.
2021 — Context-based keywords, Python 3.10, introduced match
and case
as soft keywords for pattern matching blocks.
2023 — Type-matching keyword, Python 3.12, added type
as a soft keyword in match statements, continuing Python’s flexible approach.
2025 — Slow and stable changes, Python core team, avoids full new keywords and maintains long-term support for existing names
Problems and Solutions with Python Names and Keywords
Good naming in Python helps you write code that runs without error and is easy to understand. Python has clear rules for names and reserved words called keywords. These rules prevent confusion. The problems below use everyday examples to explain how Python naming rules work and why they matter. Each problem shows a situation and each solution connects it to Python.
Problem 1: Following naming rules in a form
You are filling out a form that asks for a username. The form says the name must begin with a letter and can only include letters, numbers, or underscores. You type 12*Star
, but the form rejects it. It begins with a number and uses *
, which is not allowed. You try again with Star_12
and the form accepts it.
Python has the same rule for names. A Python name must begin with a letter or an underscore. After that, the name can include letters, numbers, or underscores. No other characters are allowed.
Python lets you begin names with letters or underscores.
This example shows two valid Python names:
player1 = "Alice"
_score = 95
The name player1
begins with a letter. The name _score
begins with an underscore. Both follow the rules.
Problem 2: Case-sensitive labels
You are sorting boxes and put a label on one that says Fragile
. You label another box as fragile
. You think they are the same. But a helper sees the capital F
and puts the boxes in different groups. The labels are treated as separate.
Python also treats uppercase and lowercase letters as different. A name like Time
is not the same as time
. If you write Value = 10
and later use value
, Python does not recognize it. Python sees value
as a different name or as a name that does not exist.
You and Python treat name and Name as different.
This example shows how case affects names in Python:
Name = "box"
name = "crate"
The name Name
and the name name
are separate. Python stores them as different names.
Problem 3: Using a reserved word as a name
You are playing a board game. The game says that if someone says the word Skip
, the next player misses a turn. You choose the team name Skip
. During the game, people get confused. They don’t know if you mean the team or the game rule.
Python also has special words called keywords. A keyword has a meaning in Python. You cannot use a keyword as a name. For example, for
is a keyword used to start a loop. If you write for = 5
, Python gives an error. It expects for
to begin a loop, not store a value.
Python won’t let you name something for
.
This example shows what happens when a keyword is used as a name:
for = 5
Python does not allow this. The keyword for
is reserved.
Problem 4: Words with special meaning in context
The word ace
means different things in different places. In a card game, ace
means a strong card. Outside the game, ace
can be a nickname. The meaning changes based on the context.
Python uses soft keywords in the same way. A soft keyword is only treated like a keyword in certain places. The words match
and case
are soft keywords in Python 3.10 and later. Inside a match
block, Python treats them as keywords. Outside the block, you can use them as names.
You can use match and case as names unless Python needs them.
This example shows how match
and case
work in context:
match value:
case 1:
print("one")
The word match
starts the pattern match. The word case
checks the value. Python reads these words as keywords only in this block.
Problem 5: Understanding special name patterns
You see company project codes written as __DATA__
. You are told not to make names like that. These names are used for official tools. You are also told that if a folder begins with _
, it is marked as internal. These naming rules are not enforced by the computer, but everyone follows them.
Python uses similar patterns. A name like __init__
begins and ends with two underscores. This kind of name is used by Python itself. You should not make your own names in this format unless you are using one of Python’s built-in methods.
A name that begins with one underscore, like _data
, means “internal use.” Python does not stop you from using it, but other programmers will understand that the name is not for general use.
A name that begins with two underscores, like __secret
, is changed by Python when it is used inside a class. Python adds the class name to the front of the name. This is called name mangling. It protects the name from being used by mistake in other parts of the code.
When you use double underscores, Python rewrites the name.
This example shows a special name used inside a class:
class Vault:
def __init__(self):
self.__code = "1234"
The name __code
is changed by Python so it does not get mixed up with names in other classes. This keeps it protected inside Vault
.
Like, Comment, and Subscribe
Did you find this helpful? Let me know by clicking the like button below. I'd love to hear your thoughts in the comments, too! If you want to see more content like this, don't forget to subscribe to my channel. Thanks for reading!
Mike Vincent is an American software engineer and writer based in Los Angeles. Mike writes about technology leadership and holds degrees in Linguistics and Industrial Automation. More about Mike Vincent