symtable — 컴파일러 심볼 테이블 액세스¶
소스 코드: Lib/symtable.py
심볼 테이블은 바이트 코드가 생성되기 직전에 컴파일러가 AST로부터 생성합니다. 심볼 테이블은 코드의 모든 식별자의 스코프를 계산하는 역할을 합니다. :mod:`!symtable`은 이러한 테이블을 검사하는 인터페이스를 제공합니다.
심볼 테이블 생성하기¶
- symtable.symtable(code, filename, compile_type, *, module=None)¶
Return the toplevel
SymbolTablefor the Python source code. filename is the name of the file containing the code. compile_type is like the mode argument tocompile(). The optional argument module specifies the module name. It is needed to unambiguous filter syntax warnings by module name.Added in version 3.15: module 매개변수 추가.
심볼 테이블 검사하기¶
- class symtable.SymbolTableType¶
SymbolTable객체의 타입을 나타내는 열거형입니다.- MODULE = "module"¶
모듈의 심볼 테이블에 사용됩니다.
- FUNCTION = "function"¶
함수의 심볼 테이블에 사용됩니다.
- CLASS = "class"¶
클래스의 심볼 테이블에 사용됩니다.
다음 멤버들은 :ref:`annotation scopes <annotation-scopes>`의 다양한 종류를 참조합니다.
- ANNOTATION = "annotation"¶
from __future__ import annotations가 활성화된 경우 어노테이션에 사용됩니다.
- TYPE_PARAMETERS = "type parameters"¶
generic functions 또는 :ref:`generic classes <generic-classes>`의 심볼 테이블에 사용됩니다.
- TYPE_VARIABLE = "type variable"¶
형식적인 의미에서 단일 타입 변수의 결속된(bound), 제약 조건 튜플(constraint tuple) 또는 기본값에 대한 심볼 테이블에 사용됩니다. 즉, TypeVar, TypeVarTuple 또는 ParamSpec 객체입니다 (후자는 결속된 값이나 제약 조건 튜플을 지원하지 않습니다).
Added in version 3.13.
- class symtable.SymbolTable¶
블록에 대한 이름 공간 테이블. 생성자는 공개되지 않습니다.
- get_type()¶
심볼 테이블의 형을 돌려줍니다. 가능한 값은
SymbolTableType열거형의 멤버들입니다.버전 3.12에서 변경: 가능한 반환 값으로
'annotation','TypeVar bound','type alias', 및'type parameter'가 추가되었습니다.버전 3.13에서 변경: 반환 값은
SymbolTableType열거형의 멤버입니다.반환되는 문자열의 정확한 값은 향후 변경될 수 있으므로, 하드 코딩된 문자열 대신
SymbolTableType멤버를 사용하는 것이 좋습니다.
- get_id()¶
테이블의 식별자를 돌려줍니다.
- get_name()¶
테이블의 이름을 반환합니다. 테이블이 클래스를 위한 것이면 클래스의 이름이고, 테이블이 함수를 위한 것이면 함수의 이름이고, 테이블이 전역이면
'top'입니다 (get_type()은'module'을 반환합니다). 타입 매개변수 스코프(제네릭 클래스, 함수 및 타입 별칭에 사용됨)의 경우, 기본 클래스, 함수 또는 타입 별칭의 이름입니다. 타입 별칭 스코프의 경우, 타입 별칭의 이름입니다.TypeVar바운드 스코프의 경우,TypeVar의 이름입니다.
- get_lineno()¶
이 테이블이 나타내는 블록의 첫 번째 줄 번호를 반환합니다.
- is_optimized()¶
이 테이블의 지역(locals)을 최적화할 수 있으면
True를 반환합니다.
- is_nested()¶
블록이 중첩된 클래스나 함수면
True를 반환합니다.
- has_children()¶
블록에 중첩된 이름 공간이 있으면
True를 반환합니다. 이것들은get_children()으로 얻을 수 있습니다.
- get_children()¶
중첩된 심볼 테이블의 리스트를 반환합니다.
- class symtable.Function¶
함수나 메서드의 이름 공간. 이 클래스는
SymbolTable을 상속합니다.- get_parameters()¶
이 함수의 매개 변수 이름을 포함하는 튜플을 반환합니다.
- get_locals()¶
이 함수의 지역 이름을 포함하는 튜플을 반환합니다.
- get_globals()¶
이 함수의 전역 이름을 포함하는 튜플을 반환합니다.
- get_nonlocals()¶
이 함수에서 명시적으로 선언된 nonlocal 이름을 포함하는 튜플을 반환합니다.
- get_frees()¶
이 함수의 자유 (클로저) 변수 이름을 포함하는 튜플을 반환합니다.
- class symtable.Class¶
클래스의 이름 공간. 이 클래스는
SymbolTable을 상속합니다.
- class symtable.Symbol¶
소스의 식별자에 해당하는
SymbolTable의 항목. 생성자는 공개되지 않습니다.- get_name()¶
심볼의 이름을 돌려줍니다.
- is_referenced()¶
심볼이 블록에서 사용되면
True를 반환합니다.
- is_imported()¶
심볼이 import 문에서 만들어지면
True를 반환합니다.
- is_parameter()¶
심볼이 매개 변수면
True를 반환합니다.
- is_type_parameter()¶
심볼이 타입 매개변수이면
True를 반환합니다.Added in version 3.14.
- is_global()¶
심볼이 전역이면
True를 반환합니다.
- is_nonlocal()¶
심볼이 nonlocal이면
True를 반환합니다.
- is_declared_global()¶
심볼이 global 문으로 전역으로 선언되면
True를 반환합니다.
- is_local()¶
심볼이 블록의 지역이면
True를 반환합니다.
- is_annotated()¶
심볼이 어노테이트 되었으면
True를 반환합니다.Added in version 3.6.
- is_free()¶
심볼이 블록에서 참조되지만 대입되지 않으면
True를 반환합니다.
- is_cell()¶
심볼이 중첩된 블록에서 참조되었지만 할당되지 않았다면
True를 반환합니다.Added in version 3.15.
- is_free_class()¶
클래스 스코프 심볼이 메서드 관점에서 자유로운 경우 True 를 반환합니다.
다음 예를 고려하십시오:
def f(): x = 1 # 함수 스코프 class C: x = 2 # 클래스 스코프 def method(self): return x
이 예제에서, 클래스 스코프 심볼
x는C.method의 관점에서 자유로운 것으로 간주되어, 런타임에 2 가 아닌 1 을 반환할 수 있게 합니다.Added in version 3.14.
- is_assigned()¶
심볼이 블록에 대입되면
True를 반환합니다.
- is_comp_iter()¶
심볼이 컴프리헨션 반복 변수이면
True를 반환합니다.Added in version 3.14.
- is_comp_cell()¶
심볼이 인라인 컴프리헨션의 셀이면
True를 반환합니다.Added in version 3.14.
- is_namespace()¶
이름 연결(name binding)이 새로운 이름 공간을 도입하면
True를 반환합니다.이름이 함수나 클래스 문의 대상으로 사용되면 참입니다.
예를 들면:
>>> table = symtable.symtable("def some_func(): pass", "string", "exec") >>> table.lookup("some_func").is_namespace() True
하나의 이름을 여러 객체에 연결할 수 있음에 유의하십시오. 결과가
True이면, 이름은 새 이름 공간을 도입하지 않는 int 나 list와 같은 다른 객체에도 연결되어있을 수 있습니다.
- get_namespaces()¶
이 이름에 연결된 이름 공간의 리스트를 돌려줍니다.
- get_namespace()¶
이 이름에 연결된 이름 공간을 돌려줍니다. 이 이름에 연결된 이름 공간이 둘 이상이거나 없으면,
ValueError가 발생합니다.
명령줄 사용법¶
Added in version 3.13.
symtable 모듈은 명령줄에서 스크립트로 실행될 수 있습니다.
python -m symtable [infile...]
심볼 테이블은 지정된 Python 소스 파일에 대해 생성되어 stdout으로 출력됩니다. 입력 파일이 지정되지 않으면 stdin에서 내용을 읽습니다.