17db96d56Sopenharmony_ci:mod:`symtable` --- Access to the compiler's symbol tables 27db96d56Sopenharmony_ci========================================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: symtable 57db96d56Sopenharmony_ci :synopsis: Interface to the compiler's internal symbol tables. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci**Source code:** :source:`Lib/symtable.py` 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci-------------- 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ci.. moduleauthor:: Jeremy Hylton <jeremy@alum.mit.edu> 127db96d56Sopenharmony_ci.. sectionauthor:: Benjamin Peterson <benjamin@python.org> 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciSymbol tables are generated by the compiler from AST just before bytecode is 167db96d56Sopenharmony_cigenerated. The symbol table is responsible for calculating the scope of every 177db96d56Sopenharmony_ciidentifier in the code. :mod:`symtable` provides an interface to examine these 187db96d56Sopenharmony_citables. 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ciGenerating Symbol Tables 227db96d56Sopenharmony_ci------------------------ 237db96d56Sopenharmony_ci 247db96d56Sopenharmony_ci.. function:: symtable(code, filename, compile_type) 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci Return the toplevel :class:`SymbolTable` for the Python source *code*. 277db96d56Sopenharmony_ci *filename* is the name of the file containing the code. *compile_type* is 287db96d56Sopenharmony_ci like the *mode* argument to :func:`compile`. 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ciExamining Symbol Tables 327db96d56Sopenharmony_ci----------------------- 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ci.. class:: SymbolTable 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci A namespace table for a block. The constructor is not public. 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci .. method:: get_type() 397db96d56Sopenharmony_ci 407db96d56Sopenharmony_ci Return the type of the symbol table. Possible values are ``'class'``, 417db96d56Sopenharmony_ci ``'module'``, and ``'function'``. 427db96d56Sopenharmony_ci 437db96d56Sopenharmony_ci .. method:: get_id() 447db96d56Sopenharmony_ci 457db96d56Sopenharmony_ci Return the table's identifier. 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci .. method:: get_name() 487db96d56Sopenharmony_ci 497db96d56Sopenharmony_ci Return the table's name. This is the name of the class if the table is 507db96d56Sopenharmony_ci for a class, the name of the function if the table is for a function, or 517db96d56Sopenharmony_ci ``'top'`` if the table is global (:meth:`get_type` returns ``'module'``). 527db96d56Sopenharmony_ci 537db96d56Sopenharmony_ci .. method:: get_lineno() 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci Return the number of the first line in the block this table represents. 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci .. method:: is_optimized() 587db96d56Sopenharmony_ci 597db96d56Sopenharmony_ci Return ``True`` if the locals in this table can be optimized. 607db96d56Sopenharmony_ci 617db96d56Sopenharmony_ci .. method:: is_nested() 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci Return ``True`` if the block is a nested class or function. 647db96d56Sopenharmony_ci 657db96d56Sopenharmony_ci .. method:: has_children() 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci Return ``True`` if the block has nested namespaces within it. These can 687db96d56Sopenharmony_ci be obtained with :meth:`get_children`. 697db96d56Sopenharmony_ci 707db96d56Sopenharmony_ci .. method:: get_identifiers() 717db96d56Sopenharmony_ci 727db96d56Sopenharmony_ci Return a view object containing the names of symbols in the table. 737db96d56Sopenharmony_ci See the :ref:`documentation of view objects <dict-views>`. 747db96d56Sopenharmony_ci 757db96d56Sopenharmony_ci .. method:: lookup(name) 767db96d56Sopenharmony_ci 777db96d56Sopenharmony_ci Lookup *name* in the table and return a :class:`Symbol` instance. 787db96d56Sopenharmony_ci 797db96d56Sopenharmony_ci .. method:: get_symbols() 807db96d56Sopenharmony_ci 817db96d56Sopenharmony_ci Return a list of :class:`Symbol` instances for names in the table. 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci .. method:: get_children() 847db96d56Sopenharmony_ci 857db96d56Sopenharmony_ci Return a list of the nested symbol tables. 867db96d56Sopenharmony_ci 877db96d56Sopenharmony_ci 887db96d56Sopenharmony_ci.. class:: Function 897db96d56Sopenharmony_ci 907db96d56Sopenharmony_ci A namespace for a function or method. This class inherits 917db96d56Sopenharmony_ci :class:`SymbolTable`. 927db96d56Sopenharmony_ci 937db96d56Sopenharmony_ci .. method:: get_parameters() 947db96d56Sopenharmony_ci 957db96d56Sopenharmony_ci Return a tuple containing names of parameters to this function. 967db96d56Sopenharmony_ci 977db96d56Sopenharmony_ci .. method:: get_locals() 987db96d56Sopenharmony_ci 997db96d56Sopenharmony_ci Return a tuple containing names of locals in this function. 1007db96d56Sopenharmony_ci 1017db96d56Sopenharmony_ci .. method:: get_globals() 1027db96d56Sopenharmony_ci 1037db96d56Sopenharmony_ci Return a tuple containing names of globals in this function. 1047db96d56Sopenharmony_ci 1057db96d56Sopenharmony_ci .. method:: get_nonlocals() 1067db96d56Sopenharmony_ci 1077db96d56Sopenharmony_ci Return a tuple containing names of nonlocals in this function. 1087db96d56Sopenharmony_ci 1097db96d56Sopenharmony_ci .. method:: get_frees() 1107db96d56Sopenharmony_ci 1117db96d56Sopenharmony_ci Return a tuple containing names of free variables in this function. 1127db96d56Sopenharmony_ci 1137db96d56Sopenharmony_ci 1147db96d56Sopenharmony_ci.. class:: Class 1157db96d56Sopenharmony_ci 1167db96d56Sopenharmony_ci A namespace of a class. This class inherits :class:`SymbolTable`. 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci .. method:: get_methods() 1197db96d56Sopenharmony_ci 1207db96d56Sopenharmony_ci Return a tuple containing the names of methods declared in the class. 1217db96d56Sopenharmony_ci 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci.. class:: Symbol 1247db96d56Sopenharmony_ci 1257db96d56Sopenharmony_ci An entry in a :class:`SymbolTable` corresponding to an identifier in the 1267db96d56Sopenharmony_ci source. The constructor is not public. 1277db96d56Sopenharmony_ci 1287db96d56Sopenharmony_ci .. method:: get_name() 1297db96d56Sopenharmony_ci 1307db96d56Sopenharmony_ci Return the symbol's name. 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci .. method:: is_referenced() 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci Return ``True`` if the symbol is used in its block. 1357db96d56Sopenharmony_ci 1367db96d56Sopenharmony_ci .. method:: is_imported() 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci Return ``True`` if the symbol is created from an import statement. 1397db96d56Sopenharmony_ci 1407db96d56Sopenharmony_ci .. method:: is_parameter() 1417db96d56Sopenharmony_ci 1427db96d56Sopenharmony_ci Return ``True`` if the symbol is a parameter. 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci .. method:: is_global() 1457db96d56Sopenharmony_ci 1467db96d56Sopenharmony_ci Return ``True`` if the symbol is global. 1477db96d56Sopenharmony_ci 1487db96d56Sopenharmony_ci .. method:: is_nonlocal() 1497db96d56Sopenharmony_ci 1507db96d56Sopenharmony_ci Return ``True`` if the symbol is nonlocal. 1517db96d56Sopenharmony_ci 1527db96d56Sopenharmony_ci .. method:: is_declared_global() 1537db96d56Sopenharmony_ci 1547db96d56Sopenharmony_ci Return ``True`` if the symbol is declared global with a global statement. 1557db96d56Sopenharmony_ci 1567db96d56Sopenharmony_ci .. method:: is_local() 1577db96d56Sopenharmony_ci 1587db96d56Sopenharmony_ci Return ``True`` if the symbol is local to its block. 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci .. method:: is_annotated() 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci Return ``True`` if the symbol is annotated. 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci .. versionadded:: 3.6 1657db96d56Sopenharmony_ci 1667db96d56Sopenharmony_ci .. method:: is_free() 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci Return ``True`` if the symbol is referenced in its block, but not assigned 1697db96d56Sopenharmony_ci to. 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci .. method:: is_assigned() 1727db96d56Sopenharmony_ci 1737db96d56Sopenharmony_ci Return ``True`` if the symbol is assigned to in its block. 1747db96d56Sopenharmony_ci 1757db96d56Sopenharmony_ci .. method:: is_namespace() 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ci Return ``True`` if name binding introduces new namespace. 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci If the name is used as the target of a function or class statement, this 1807db96d56Sopenharmony_ci will be true. 1817db96d56Sopenharmony_ci 1827db96d56Sopenharmony_ci For example:: 1837db96d56Sopenharmony_ci 1847db96d56Sopenharmony_ci >>> table = symtable.symtable("def some_func(): pass", "string", "exec") 1857db96d56Sopenharmony_ci >>> table.lookup("some_func").is_namespace() 1867db96d56Sopenharmony_ci True 1877db96d56Sopenharmony_ci 1887db96d56Sopenharmony_ci Note that a single name can be bound to multiple objects. If the result 1897db96d56Sopenharmony_ci is ``True``, the name may also be bound to other objects, like an int or 1907db96d56Sopenharmony_ci list, that does not introduce a new namespace. 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ci .. method:: get_namespaces() 1937db96d56Sopenharmony_ci 1947db96d56Sopenharmony_ci Return a list of namespaces bound to this name. 1957db96d56Sopenharmony_ci 1967db96d56Sopenharmony_ci .. method:: get_namespace() 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci Return the namespace bound to this name. If more than one or no namespace 1997db96d56Sopenharmony_ci is bound to this name, a :exc:`ValueError` is raised. 200