← 返回 Day 1 正文

Day 1 · 图解

Python 执行流程

flowchart TB subgraph Source[" 源代码 .py 文件 "] A["print('Hello')"] end subgraph Lexer[" 词法分析 (Lexer) "] B["Token 序列:<br/>NAME 'print'<br/>LPAR<br/>STRING 'Hello'<br/>RPAR"] end subgraph Parser[" 语法分析 (Parser) "] C["抽象语法树 (AST)"] end subgraph Compiler[" 编译器 (Compiler) "] D["字节码 (Bytecode)"] E["__pycache__/*.pyc<br/>缓存文件"] end subgraph VM[" CPython 虚拟机 "] F["逐条执行字节码<br/>管理栈帧、对象"] end subgraph Output[" 输出 "] G["Hello"] end A --> Lexer Lexer --> Parser Parser --> Compiler Compiler --> D D --> E E -.->|"复用缓存"| D D --> VM VM --> Output
flowchart TB
    subgraph Source[" 源代码 .py 文件 "]
        A["print('Hello')"]
    end
    
    subgraph Lexer[" 词法分析 (Lexer) "]
        B["Token 序列:<br/>NAME 'print'<br/>LPAR<br/>STRING 'Hello'<br/>RPAR"]
    end
    
    subgraph Parser[" 语法分析 (Parser) "]
        C["抽象语法树 (AST)"]
    end
    
    subgraph Compiler[" 编译器 (Compiler) "]
        D["字节码 (Bytecode)"]
        E["__pycache__/*.pyc<br/>缓存文件"]
    end
    
    subgraph VM[" CPython 虚拟机 "]
        F["逐条执行字节码<br/>管理栈帧、对象"]
    end
    
    subgraph Output[" 输出 "]
        G["Hello"]
    end
    
    A --> Lexer
    Lexer --> Parser
    Parser --> Compiler
    Compiler --> D
    D --> E
    E -.->|"复用缓存"| D
    D --> VM
    VM --> Output

Python 内存模型(基础)

                 ┌─────────────────────┐
                 │    内存地址空间      │
                 │                     │
                 │  ┌───────────────┐  │
                 │  │    代码区      │  │
                 │  │ 字节码指令     │  │
                 │  └───────────────┘  │
                 │                     │
                 │  ┌───────────────┐  │
                 │  │    栈区        │  │
                 │  │  ┌─────────┐  │  │
                 │  │  │ 栈帧 1  │  │  │
                 │  │  │ 局部变量 │  │  │
                 │  │  │ 返回地址 │  │  │
                 │  │  └─────────┘  │  │
                 │  │  ┌─────────┐  │  │
                 │  │  │ 栈帧 2  │  │  │
                 │  │  │ ...     │  │  │
                 │  │  └─────────┘  │  │
                 │  └───────────────┘  │
                 │                     │
                 │  ┌───────────────┐  │
                 │  │    堆区        │  │
                 │  │  ┌─────────┐  │  │
                 │  │  │ 对象 A  │  │  │
                 │  │  │ "Hello" │  │  │
                 │  │  └─────────┘  │  │
                 │  │  ┌─────────┐  │  │
                 │  │  │ 对象 B  │  │  │
                 │  │  │   42    │  │  │
                 │  │  └─────────┘  │  │
                 │  │  ...          │  │
                 │  └───────────────┘  │
                 └─────────────────────┘

Python 版本演变

timeline title Python 版本历史 1991 : Python 0.9.0 发布 1994 : Python 1.0 : lambda, map, filter 2000 : Python 2.0 : Unicode, 列表推导式 2008 : Python 3.0 : print() 函数, 新式类 2010 : Python 2.7 (最终 2.x) 2020 : Python 2 正式停止支持 2022 : Python 3.11 : 大幅性能提升 2023 : Python 3.12 : 更友好的错误信息 2024+ : Python 3.13 : 自由线程 (nogil)
timeline
    title Python 版本历史
    1991 : Python 0.9.0 发布
    1994 : Python 1.0
         : lambda, map, filter
    2000 : Python 2.0
         : Unicode, 列表推导式
    2008 : Python 3.0
         : print() 函数, 新式类
    2010 : Python 2.7 (最终 2.x)
    2020 : Python 2 正式停止支持
    2022 : Python 3.11
         : 大幅性能提升
    2023 : Python 3.12
         : 更友好的错误信息
    2024+ : Python 3.13
          : 自由线程 (nogil)

Python VS 其他语言

quadrantChart title 编程语言对比 x-axis "慢" --> "快" y-axis "新手友好" --> "专家导向" quadrant-1 "适合入门" quadrant-2 "高效开发" quadrant-3 "底层控制" quadrant-4 "高性能" Python: [0.25, 0.25] JavaScript: [0.35, 0.35] Java: [0.55, 0.50] C++: [0.85, 0.80] Rust: [0.75, 0.75] Go: [0.50, 0.55]
quadrantChart
    title 编程语言对比
    x-axis "慢" --> "快"
    y-axis "新手友好" --> "专家导向"
    quadrant-1 "适合入门"
    quadrant-2 "高效开发"
    quadrant-3 "底层控制"
    quadrant-4 "高性能"
    Python: [0.25, 0.25]
    JavaScript: [0.35, 0.35]
    Java: [0.55, 0.50]
    C++: [0.85, 0.80]
    Rust: [0.75, 0.75]
    Go: [0.50, 0.55]