38

I'd like to get a list of all of Pythons keywords as strings. It would also be rather nifty if I could do a similar thing for built in functions.

Something like this :

import syntax
print syntax.keywords
# prints ['print', 'if', 'for', etc...]
wim
  • 302,178
  • 90
  • 548
  • 690
rectangletangle
  • 46,943
  • 90
  • 196
  • 270
  • 5
    Anyway: See the Python language documentation: [Simple statements](http://docs.python.org/reference/simple_stmts.html), [Compund statements](http://docs.python.org/reference/compound_stmts.html) and [Keywords](http://docs.python.org/reference/lexical_analysis.html#keywords). – Sven Marnach Mar 09 '12 at 22:58

7 Answers7

71

You asked about statements, while showing keywords in your output example.

If you're looking for keywords, they're all listed in the keyword module:

>>> import keyword
>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif',
 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import',
 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try',
 'while', 'with', 'yield']

From the keyword.kwlist doc:

Sequence containing all the keywords defined for the interpreter. If any keywords are defined to only be active when particular __future__ statements are in effect, these will be included as well.

Rik Poggi
  • 26,862
  • 6
  • 63
  • 81
  • Built-in functions are **NOT** **statements**. A **statement** is when you make a declaration such as defining a function and begining with the **keyword** `def` and have one or more clauses, etc. He asked about the **built-in identifiers** NOT about **statements** as you indicated. From his output only `if` and `for` are **keywords**, `print` is just a built-in identifier. Also the example is not complete because you're only listing the **keywords** without listing the **built-in identifiers (functions)** as he asked. I think you should amend the answer to include those as well. – Marius Mucenicu Jun 03 '19 at 17:51
  • Also you should make the answer even more granular if you'd want it to be complete because `print` means different things in **Python2** and in **Python3**. In **Python3** it won't show up as it does in your example because, as I've indicated in my aforementioned answer, it's not a **keyword** anymore (but merely a **built-in identifier**). Also, since he asked about the built-in **functions**, [these](https://docs.python.org/3/library/functions.html#built-in-functions) need to be included. Now, I know this thread has been here for quite some time but this might help future readers. – Marius Mucenicu Jun 03 '19 at 18:00
  • Why do __new__, __init__, self, cls, etc. are missing, and how to list them too? – defoe Jun 20 '19 at 20:52
12

The built-in functions are in a module called __builtins__, so:

dir(__builtins__)
Greg Hewgill
  • 890,778
  • 177
  • 1,125
  • 1,260
  • 2
    If this code is in an imported module, I think it would be `__builtins__.keys()` instead. Or in Python 3, `import builtins` then `dir(builtins)` regardless of module. https://docs.python.org/3/reference/executionmodel.html "By default, when in the `__main__` module, `__builtins__` is the built-in module `builtins`; when in any other module, `__builtins__` is an alias for the dictionary of the `builtins` module itself." – S. Kirby Jun 26 '16 at 07:19
5

The closest approach I can think of is the following:

from keyword import kwlist
print kwlist

The standard keyword module is generated automatically. For other things related to Python parsing from Python, check the language services set of modules.

Regarding listing the builtins I'm not clear if you're asking for items in the __builtin__ module or functions in that package that are implemented directly in the CPython interpreter:

import __builtin__ as B
from inspect import isbuiltin

# You're either asking for this:
print [name for name in dir(B) if isbuiltin(getattr(B, name))]

# Or this:
print dir(B)
C2H5OH
  • 5,251
  • 2
  • 25
  • 39
2

Or you can import builtins:

>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
>>> 

OR (this does not contain errors and stuff with __ beside them):

>>> help('keywords')

Here is a list of the Python keywords.  Enter any keyword to get more help.

False               def                 if                  raise
None                del                 import              return
True                elif                in                  try
and                 else                is                  while
as                  except              lambda              with
assert              finally             nonlocal            yield
break               for                 not                 
class               from                or                  
continue            global              pass                
U12-Forward
  • 65,118
  • 12
  • 70
  • 89
1

>>> help()

help> keywords

Here is a list of the Python keywords. Enter any keyword to get more help.

False def if raise

None del import return

True elif in try

and else is while

as except lambda with

assert finally nonlocal yield

break for not

class from or

continue global pass

Sandeep_black
  • 1,142
  • 15
  • 17
0

Get a list of all of Pythons keywords

  • 2018-06-07

The standard keyword module is generated automatically (a Quine) Quine (computing)

>>> import keyword
>>> 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']
>>> len(keyword.kwlist)
33

I categorized the keywords for further reference.

keywords_33=[
    ('file_2', ['with', 'as']),
    ('module_2', ['from', 'import']),
    ('constant_3', {'bool': ['False', 'True'], 
                    'none': ['None']}),
    ('operator_5',
            {'logic': ['and', 'not', 'or'],
            'relation': ['is', 'in']}),
    ('class_1', ['class']),
    ('function_7',
            ['lambda','def','pass',
            'global','nonlocal',
            'return','yield']),
    ('loop_4', ['while', 'for', 'continue', 'break']),
    ('condition_3', ['if', 'elif', 'else']),
    ('exception_4', ['try', 'raise','except', 'finally']),
    ('debug_2', ['del','assert']),
]
AbstProcDo
  • 17,381
  • 14
  • 68
  • 114
0

You do not need to import syntax, but you still have to import keyword.

>>> import keyword
>>> print(keyword.kwlist)

the result is:

['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']
Arav Taneja
  • 31
  • 1
  • 10