symtable — 컴파일러 심볼 테이블 액세스¶
소스 코드: Lib/symtable.py
심볼 테이블은 바이트 코드가 생성되기 직전에 컴파일러가 AST에서 생성합니다. 심볼 테이블은 코드 내 모든 식별자의 스코프를 계산하는 역할을 합니다. symtable 은 이러한 테이블을 조사할 수 있는 인터페이스를 제공합니다.
심볼 테이블 생성하기¶
- symtable.symtable(code, filename, compile_type, *, module=None)¶
파이썬 소스 code 에 대한 최상위
SymbolTable을 반환합니다. filename 은 코드가 포함된 파일의 이름이며, compile_type 은compile()의 mode 인자와 유사합니다. 선택적 인자인 module 은 모듈 이름을 지정하며, 이는 모듈 이름에 따라 구문 경고를 명확하게 filter 하는 데 필요합니다.Added in version 3.15: module 파라미터가 추가되었습니다.
심볼 테이블 검사하기¶
- class symtable.SymbolTableType¶
SymbolTable객체의 유형을 나타내는 열거형입니다.- MODULE = "module"¶
모듈의 심볼 테이블에 사용됩니다.
- FUNCTION = "function"¶
함수의 심볼 테이블에 사용됩니다.
- CLASS = "class"¶
클래스의 심볼 테이블에 사용됩니다.
다음 멤버들은 다양한 형태의 annotation scopes 를 참조합니다.
- ANNOTATION = "annotation"¶
from __future__ import annotations이 활성화된 경우 어노테이션에 사용됩니다.
- TYPE_PARAMETERS = "type parameters"¶
generic functions 또는 generic classes 의 심볼 테이블에 사용됩니다.
- TYPE_VARIABLE = "type variable"¶
형식적인 의미에서의 단일 타입 변수(즉, 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()¶
테이블의 이름을 반환합니다. 테이블이 클래스를 위한 경우 클래스 이름, 함수를 위한 경우 함수 이름, 전역인 경우(또한
get_type()은'module'을 반환함)'top'을 반환합니다. 타입 파라미터 스코프(제네릭 클래스, 함수 및 타입 별칭에 사용됨)의 경우 기본이 되는 클래스, 함수 또는 타입 별칭의 이름을 반환합니다. 타입 별칭 스코프의 경우 타입 별칭의 이름을 반환하며,TypeVar바인딩 스코프의 경우TypeVar의 이름을 반환합니다.
- get_lineno()¶
이 테이블이 나타내는 블록의 첫 번째 줄 번호를 반환합니다.
- is_optimized()¶
이 테이블의 지역(locals)을 최적화할 수 있으면
True를 반환합니다.
- is_nested()¶
블록이 중첩된 클래스나 함수면
True를 반환합니다.
- has_children()¶
블록에 중첩된 이름 공간이 있으면
True를 반환합니다. 이것들은get_children()으로 얻을 수 있습니다.
- get_identifiers()¶
테이블에 포함된 심볼의 이름을 포함하는 뷰 객체를 반환합니다. documentation of view objects 를 참조하십시오.
- get_children()¶
중첩된 심볼 테이블의 리스트를 반환합니다.
- class symtable.Function¶
함수나 메서드의 이름 공간. 이 클래스는
SymbolTable을 상속합니다.- get_parameters()¶
이 함수의 매개 변수 이름을 포함하는 튜플을 반환합니다.
- get_locals()¶
이 함수의 지역 이름을 포함하는 튜플을 반환합니다.
- get_globals()¶
이 함수의 전역 이름을 포함하는 튜플을 반환합니다.
- get_nonlocals()¶
이 함수에서 명시적으로 선언된 nonlocal 이름을 포함하는 튜플을 반환합니다.
- get_frees()¶
이 함수의 자유 (클로저) 변수 이름을 포함하는 튜플을 반환합니다.
- get_cells()¶
이 테이블에 있는 cell variables 의 이름을 포함하는 튜플을 반환합니다.
Added in version 3.15.
- 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()¶
클래스 범위의 심볼이 메서드 관점에서 자유로운(free) 경우 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...]
지정된 파이썬 소스 파일에 대해 심볼 테이블을 생성하고 표준 출력(stdout)으로 출력합니다. 입력 파일이 지정되지 않은 경우 내용을 표준 입력(stdin)에서 읽어옵니다.