Reputation: 17997
I learn that exit
is not a keyword in Python by,
import keyword
print('exit' in keyword.kwlist) # Output: False
But there is no reminder of NameError: name 'exit' is not defined
while using it. The output of the following snippet code makes me confused. Can anyone help me out?
for i in range(5):
print(i)
cur=i if i<2 else exit
print(cur)
# Output
0
1
2
3
4
Use exit() or Ctrl-D (i.e. EOF) to exit
I am unable to get related info about exit
from Python documentations, except for exit([code=None])
.
Upvotes: 6
Views: 1374
Reputation: 17458
exit
is an Built-in Constants added by the site
module.
The
site
module (which is imported automatically during startup, except if the-S
command-line option is given) adds several constants to the built-in namespace. They are useful for the interactive interpreter shell and should not be used in programs.
Upvotes: 1
Reputation: 309821
Keywords are part of the python syntax. They usually have special meaning in statements (e.g. for
, del
, if
...). This has other consequences -- e.g. you can't make a variable with the same name as a keyword.
builtins are callable objects (e.g. functions or at least function-like) that python provides in the namespace by default. examples of builtin functions are things like sorted
, id
, vars
, ...
It's worth noting that exit
is a convenience provided when in an interactive session. It's highly encouraged to use sys.exit
instead.
Upvotes: 6
Reputation: 20336
exit
is an instance of the Quitter
class. The Quitter
class defines an __repr__
method that returns the string that you see when you type exit
into the shell. It also defines a __call__
method. Just as __init__
is called when you use a class like a function, __call__
is called when an instance is used like a function. Therefore, exit()
calls the __call__
method, which exits the program.
Upvotes: 3
Reputation: 33387
exit
is the sys.exit
function when you are using the interactive console.
Many things exist while they are not keywords (e.g. sum
, int
...). So you can bind to existing names, but not to keywords
Upvotes: 0