尚未翻译
本页面尚未翻译成中文,因此显示英文原文。 帮助翻译
idlelib Module Complexity¶
The idlelib package implements IDLE, Python's editor and shell. Its public surface is starting
the application: python -m idlelib and the idle launcher scripts. Everything else
in the package - the editor, the shell, syntax colouring, the debugger - is private
implementation that can change in a bugfix release (PEP 434),
so this page does not price it.
IDLE is a Tk application and needs a display. By default it also starts a second Python process
to run user code, and talks to it over a local socket. f is the files named on the command
line, s is the characters in them in total, and i is the characters read from standard input.
Tk, the window system, the user-code process, and the code that -c or -r runs are not priced.
Complexity Reference¶
Starting IDLE¶
| Operation | Time | Space | Notes |
|---|---|---|---|
import idlelib |
O(1) | O(1) | Defines one flag, idlelib.testing; imports no submodule and not tkinter |
python -m idlelib [options] [file ...] |
O(f² + s) | O(f + s) | At most one editor window per file, each file read whole into its window. Each file's directory joins sys.path unless already there, so files in f different directories cost O(f²). Needs a display: on Linux without one it exits with TclError |
python -m idlelib - |
O(i) | O(i) | Reads standard input to its end before creating any window, then runs it in the shell |
python -m idlelib -h |
O(1) | O(1) | Prints the usage and exits before creating any window, so it runs without a display |
Importing the Package¶
import idlelib runs a package __init__ that sets one flag. The modules that make up IDLE
load only when something imports them, which python -m idlelib does.
import subprocess
import sys
code = 'import sys, idlelib; print(sorted(m for m in sys.modules if "idlelib" in m or "tk" in m))'
result = subprocess.run([sys.executable, '-c', code], capture_output=True, text=True, check=True)
assert result.stdout == "['idlelib']\n" # O(1) - no submodule, no tkinter
Starting IDLE Without a Window¶
-h is handled while the command line is parsed, before Tk is asked for a window, so it works on
a machine with no display.
import subprocess
import sys
result = subprocess.run(
[sys.executable, '-m', 'idlelib', '-h'], capture_output=True, text=True, check=True
) # O(1) - prints the usage and exits
assert 'USAGE: idle' in result.stdout
Performance Best Practices¶
✅ Do:
- Import
idlelibfreely; nothing loads until a submodule is imported
❌ Avoid:
- Starting IDLE on a machine without a display; it fails once Tk is asked for a window
- Building on
idlelibsubmodules; they are private and their cost can change in a bugfix release