Because Guido has decided that he made a mistake. :)

It has since been corrected: try Python 3, which dedicates a section of its release notes to describing the change to a function.

For the whole background, see PEP 3105 and the several links provided in its References section!

Answer from Brandon Rhodes on Stack Overflow
🌐
Sololearn
sololearn.com › en › Discuss › 2214477 › is-print-a-keyword-in-python
Is print a keyword in python | Sololearn: Learn to code for FREE!
March 26, 2020 - MR. PROGRAMMER , maf Actually, print is not keyword in Python. It is builtin function.
Top answer
1 of 14
62
There should be some information about this in the history of Python. Python 2 has the print keyword. Python 3 has the print function. You could Google something like "Python print function vs keyword" to find some arguments for/against the change. One argument is that now you can pass the print function as an argument to other functions.
2 of 14
53
print should be a function. It is specifically a formatted write to stdout. Making print a keyword confuses the concern of anything to do with printing with the specific concern of writing a formatted string to stdout. Furthermore most proper applications will not want to use print directly. They will either want to use a logging framework or even a console TUI library like curses, at which point your print keyword becomes somewhat useless given it is no more complicated to just have it as a function in global scope by default like python does. That is why Python2 used it as a keyword but Python3 dropped it. This is why literally every other programming language does not do this. C: printf, puts (functions) C++: std::cout (operator overload on an object) Java, Concurnas: System.out.println (method on a PrintStream) C#: Console.WriteLine (method on an object) Python 3: print (function imported implicitly by default) Prolog: writeln (predicate for writing out an atom) Shell: echo (a command, may be implemented as a builtin) Ruby: print, puts (functions in global scope) Perl: say (function) Kotlin: println (function in file scope) Groovy: println (function in file scope) JS: console.log (method on an object/prototype) Lua: print (inbuilt function) Only places that use it as a keyword are usually domain-specific. It kind of goes against the philosophy we try to avoid outside monolithic architectures, as it does not promote reusability. Keywords are usually reserved for "atomic" operations you cannot split up further like arithmetic and assignments, implementing specific design patterns (interfaces, structs, coroutines, classes, aspects, pointcuts, joinpoints, singleton objects); implementing syntax for defining routines, or managing control flow (if, unless, jump, try, catch, finally, await, yield, switch, when, match, for, while, until, repeat). TL;DR keywords should represent atomic operations in a language, or atomic concepts. They should not represent concrete functionality. Atomic meaning "smallest" or "most fundamental" as opposed to transactional atomicity. Edit: excluded PHP
Discussions

why is print a legal variable name?
First off, to hell with trick questions like that on any test. It has almost no value at all and is more of a trivia question than anything else. To answer the question though: because it's a function not a reserved word. Here are the "reserved words" in python, notice none of them are functions. import keyword print( keyword.kwlist ) ['False', 'None', 'True', 'and', 'as', 'assert', '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'] In python functions are objects, so you can assign new references to them, print is by default the reference to the print function. But you could for instance make a new reference: p = print or you could make a new version of print def print(*p, **kw): pass if you for instance wanted to run your program in "silent mode". Or combine the above to temporarily wrap a noisy/verbose call. def noprint(*p, **kw): pass save_print = print print = noprint # run noisy function call with too many print statements print = save_print More on reddit.com
🌐 r/learnpython
72
116
September 9, 2021
Should print be a keyword (`print "foo"`), or a built-in function (`print("hello")`)?
There should be some information about this in the history of Python. Python 2 has the print keyword. Python 3 has the print function. You could Google something like "Python print function vs keyword" to find some arguments for/against the change. One argument is that now you can pass the print function as an argument to other functions. More on reddit.com
🌐 r/ProgrammingLanguages
42
17
June 4, 2022
🌐
W3Schools
w3schools.com › python › ref_func_print.asp
Python print() Function
Python Overview Python Built-in ... Plan Python Interview Q&A Python Training ... The print() function prints the specified message to the screen, or other standard output device....
🌐
EyeHunts
tutorial.eyehunts.com › home › is print a keyword in python
Is print a keyword in Python
December 9, 2022 - Python print was a keyword in Python 2.7 but has been turned into a built-in function in Python 3+ and no longer appears in the list of keywords.
🌐
Real Python
realpython.com › python-keywords
Python Keywords: An Introduction – Real Python
May 22, 2026 - For example, the await and async keywords weren’t added until Python 3.7. Also, both print and exec were keywords in Python 2.7 but were turned into built-in functions in Python 3 and no longer appear in the keywords list.
Find elsewhere
🌐
Python Cheat Sheet
pythoncheatsheet.org › home › builtin › print
Python print() built-in function - Python Cheat Sheet
Print objects to the text stream file, separated by sep and followed by end. sep, end, file, and flush, if present, must be given as keyword arguments. The print() function writes the value of the argument(s) it is given.
🌐
IncludeHelp
includehelp.com › python › program-to-print-the-list-of-all-keywords.aspx
Python program to print the list of all keywords
To print the list of all keywords, we use "keyword.kwlist", which can be used after importing the "keyword" module, it returns a list of the keyword available in the current Python version.
🌐
Reddit
reddit.com › r/learnpython › why is print a legal variable name?
r/learnpython on Reddit: why is print a legal variable name?
September 9, 2021 -

I was quizzed on Python, and asked if "print" was a legal variable name. I thought it was not a legal variable name, but it is. But, when used as a variable name, the ability to use the print function is lost. Why would python allow that usage?

print=3

x=print

print(x)

Traceback (most recent call last):

File "G:/PYTHON/Projects/printasvariable.py", line 3, in <module>

print(x)

TypeError: 'int' object is not callable

>>>

Top answer
1 of 10
163
First off, to hell with trick questions like that on any test. It has almost no value at all and is more of a trivia question than anything else. To answer the question though: because it's a function not a reserved word. Here are the "reserved words" in python, notice none of them are functions. import keyword print( keyword.kwlist ) ['False', 'None', 'True', 'and', 'as', 'assert', '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'] In python functions are objects, so you can assign new references to them, print is by default the reference to the print function. But you could for instance make a new reference: p = print or you could make a new version of print def print(*p, **kw): pass if you for instance wanted to run your program in "silent mode". Or combine the above to temporarily wrap a noisy/verbose call. def noprint(*p, **kw): pass save_print = print print = noprint # run noisy function call with too many print statements print = save_print
2 of 10
18
There might be some cases when you'd want to change or extend the functionality of certain built-in classes and functions. For example, maybe you have a bunch of print statements in your code, and you want to create some kind of permanent record of everything that was printed. You might add the following to the beginning of your program to redefine the print function so that it also writes the value passed to it to a text file: old_print = print def print(value): with open("print_log.txt", "a") as file: file.write(value + "\n") old_print(value) No idea if something like this is what the Python developers actually had in mind, but this is one possible use case.
🌐
Unstop
unstop.com › home › blog › print() function in python with all parameters (+examples)
Print() Function In Python With All Parameters (+Examples)
February 3, 2025 - In Python 2, print was a statement, so no parentheses were required (though they could still be used as part of grouping). This approach limited the flexibility of the print keyword and made it harder to extend functionality.
🌐
Mimo
mimo.org › glossary › python › print-function
Explore Python's print() function, master output customization
The keyword arguments in print() allow you to customize how the data is displayed during processing. Adding a blank line between different print outputs can make debugging and reading results easier. Python’s print() is often used to iterate through and debug data structures like lists or ...
🌐
GeeksforGeeks
geeksforgeeks.org › python-keywords
Python Keywords - GeeksforGeeks
May 16, 2025 - Understanding input and output operations is fundamental to Python programming. With the print() function, we can display output in various formats, while the input() function enables interaction with users by gathering input during program ...
🌐
Real Python
realpython.com › python-print
Your Guide to the Python print() Function – Real Python
July 3, 2026 - Adding a new feature to a function is as easy as adding another keyword argument, whereas changing the language to support that new feature is much more cumbersome. Think of stream redirection or buffer flushing, for example. Another benefit of print() being a function is composability. Functions are so-called first-class objects or first-class citizens in Python, which is a fancy way of saying they’re values just like strings or numbers.
🌐
Medium
medium.com › @partha.pratimnayak › cool-way-to-print-out-python-keywords-in-python-293012166288
Cool way to print out Python keywords in Python | by Partha Pratim Nayak | Medium
February 25, 2022 - Cool way to print out Python keywords in Python The following program prints out the Python keywords false: The Boolean false operator. none: This is equivalent to Null in other languages. true: The …
🌐
iO Flood
ioflood.com › blog › python-keywords
Python Keywords: A Comprehensive Usage Guide
February 7, 2024 - Here’s a simple way to view all Python keywords: import keyword print(keyword.kwlist) # Output: # ['False', 'None', 'True', 'and', 'as', 'assert', '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']
🌐
Hyperskill
hyperskill.org › university › python › print-statement-in-python
Print Statement in Python
July 30, 2024 - It's important to display the results on the screen or a standard output device by printing them out. In Python the print() function is used for this task. It allows developers to quickly see feedback check their logic and calculations keep track of values and spot errors or inconsistencies.