"linecache" --- 텍스트 줄에 대한 무작위 액세스
**********************************************

**소스 코드:** Lib/linecache.py

======================================================================

The "linecache" module allows one to get any line from a Python source
file, while attempting to optimize internally, using a cache, the
common case where many lines are read from a single file.  This is
used by the "traceback" module to retrieve source lines for inclusion
in  the formatted traceback.

"tokenize.open()" 함수가 파일을 여는 데 사용됩니다. 이 함수는
"tokenize.detect_encoding()"를 사용하여 파일의 인코딩을 가져옵니다; 인
코딩 토큰이 없으면, 파일 인코딩의 기본값은 UTF-8입니다.

The "linecache" module defines the following functions:

linecache.getline(filename, lineno, module_globals=None)

   *filename* 파일에서 *lineno* 줄을 가져옵니다. 이 함수는 절대 예외를
   발생시키지 않을 것입니다 --- 에러 시 "''"를 반환합니다 (발견된 줄의
   줄 바꿈 문자는 포함됩니다).

   If *filename* indicates a frozen module (starting with "'<frozen
   '"), the function will attempt to get the real file name from
   "module_globals['__file__']" if *module_globals* is not "None".

   *filename*이라는 파일이 없으면, 이 함수는 먼저 *module_globals*에서
   **PEP 302** "__loader__"를 확인합니다. 그런 로더가 있고
   "get_source" 메서드를 정의하고 있으면, 그것이 소스 줄을 결정합니다
   ("get_source()"가 "None"을 반환하면, "''"이 반환됩니다). 마지막으로
   , *filename*이 상대 파일명이면, 모듈 검색 경로, "sys.path", 에 있는
   항목들에 상대적으로 검색됩니다.

   버전 3.14에서 변경: Support *filename* of frozen modules.

linecache.clearcache()

   캐시를 지웁니다. 이전에 "getline()"를 사용하여 읽은 파일의 줄이 더
   는 필요하지 않으면 이 함수를 사용하십시오.

linecache.checkcache(filename=None)

   캐시의 유효성을 확인합니다. 캐시의 파일이 디스크에서 변경되었을 수
   있고, 갱신된 버전이 필요하면 이 함수를 사용하십시오. *filename*이
   생략되면, 캐시의 모든 항목을 검사합니다.

linecache.lazycache(filename, module_globals)

   이후 호출에서 *module_globals*가 "None"이더라도 "getline()"을 통해
   나중에 해당 줄을 가져올 수 있도록, 파일 기반이 아닌 모듈에 대한 충
   분한 정보를 캡처합니다. 이렇게 하면 라인이 실제로 필요할 때까지 모
   듈 전역을 무기한으로 들고 있지 않고도 I/O를 회피합니다.

   Added in version 3.5.

예제:

   >>> import linecache
   >>> linecache.getline(linecache.__file__, 8)
   'import sys\n'
