Skip to content

第1章 Python简介与环境搭建

学习目标

完成本章学习后,读者将能够:

  • 阐述Python语言的设计哲学、发展历程及其在软件工程中的定位
  • 理解Python解释器的执行模型与字节码编译机制
  • 独立完成Python开发环境的搭建与配置
  • 熟练使用虚拟环境管理项目依赖
  • 遵循PEP 8编码规范编写符合行业标准的Python代码

1.1 Python语言概述

1.1.1 设计哲学与诞生背景

Python由荷兰计算机科学家Guido van Rossum于1989年圣诞节期间开始设计,1991年首次发布。其名称源自英国喜剧团体Monty Python,而非蟒蛇——这一命名反映了语言设计者对编程乐趣的追求。

Python的核心设计哲学可概括为**"优雅、明确、简单"**,在Python解释器中输入import this即可阅读Tim Peters撰写的《The Zen of Python》:

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Readability counts.
...

这些原则深刻影响了Python的语法设计与生态系统演进,使其成为最注重代码可读性的主流编程语言之一。

1.1.2 发展历程与版本演进

版本发布年份里程碑特性工程意义
Python 1.01994函数式编程工具(lambda/map/filter)、异常处理奠定语言基础
Python 2.02000列表推导式、垃圾回收、Unicode支持提升表达能力
Python 2.72010最后一个2.x版本EOL: 2020-01-01
Python 3.02008不向后兼容的重新设计(print函数、整数除法、Unicode默认)修复历史设计债务
Python 3.62016f-string、变量注解、异步生成器现代化语法
Python 3.82019海象运算符(:=)、位置仅限参数提升代码简洁性
Python 3.92020字典合并运算符(|)、泛型类型提示增强类型系统完善
Python 3.102021结构模式匹配(match/case)、精确错误定位语法表达力飞跃
Python 3.112022速度提升10-60%、异常组与except*性能里程碑
Python 3.122023更好的错误消息、性能优化、类型参数语法开发体验优化
Python 3.132024实验性自由线程模式(no-GIL)、JIT编译器架构性变革

学术注记:Python 3.13引入的自由线程模式(PEP 703)是语言历史上最重要的架构变更之一,它移除了全局解释器锁(GIL),使Python线程能够真正并行执行。这一变更对多线程编程范式产生了深远影响。

1.1.3 Python的执行模型

与C/C++等编译型语言不同,Python采用解释执行模型,但其内部实现并非简单的逐行解释:

源代码(.py) → 词法分析 → 语法分析 → AST → 字节码编译 → 字节码(.pyc) → 虚拟机执行
  1. 编译阶段:Python源代码首先被编译为字节码(Bytecode),存储在.pyc文件中
  2. 执行阶段:Python虚拟机(PVM)逐条执行字节码指令
  3. 优化机制:从Python 3.11起引入的特化自适应解释器会在运行时对热点代码进行优化
python
import dis

def greet(name):
    return f"Hello, {name}!"

dis.dis(greet)

通过dis模块可以查看函数的字节码指令,理解Python的底层执行逻辑。

1.1.4 Python的优势与局限

核心优势:

优势说明典型场景
开发效率高代码量通常为Java的1/3、C++的1/5快速原型、MVP开发
生态丰富PyPI收录超过50万个第三方包几乎所有应用领域
可读性强强制缩进、简洁语法团队协作、代码审查
跨平台解释器覆盖主流操作系统跨平台部署
多范式面向对象、函数式、过程式灵活架构设计
胶水语言与C/C++无缝互操作性能关键模块扩展

已知局限:

局限原因应对策略
执行速度解释执行、动态类型Cython/Numba加速、关键路径用C扩展
GIL限制历史设计决策多进程、异步IO、Python 3.13+自由线程
移动端弱生态不成熟Kivy/BeeWare、核心逻辑用Python+UI用原生
打包部署依赖管理复杂Docker容器化、PyInstaller/Nuitka
运行时错误动态类型类型注解+mypy静态检查

1.1.5 应用领域全景

┌──────────────────────────────────────────────────────────────────┐
│                     Python应用领域与核心工具链                     │
├──────────────┬───────────────────────────────────────────────────┤
│  Web开发      │  Django, Flask, FastAPI, Starlette, Sanic        │
│  数据科学     │  NumPy, Pandas, Polars, Matplotlib, Seaborn      │
│  机器学习     │  TensorFlow, PyTorch, JAX, Scikit-learn          │
│  深度学习     │  Keras, Hugging Face, PyTorch Lightning          │
│  自动化运维   │  Ansible, SaltStack, Fabric, Nornir              │
│  网络爬虫     │  Scrapy, BeautifulSoup, Playwright, httpx        │
│  游戏开发     │  Pygame, Arcade, Panda3D, Ren'Py                │
│  桌面应用     │  PyQt, PySide6, Tkinter, wxPython               │
│  科学计算     │  SciPy, SymPy, SageMath                         │
│  数据可视化   │  Plotly, Bokeh, Altair, PyEcharts               │
│  自然语言处理 │  NLTK, spaCy, Transformers, LangChain           │
│  量化金融     │  Zipline, Backtrader, QuantLib-Python            │
│  图像处理     │  Pillow, OpenCV, scikit-image                   │
│  音视频处理   │  MoviePy, PyDub, OpenCV                         │
│  系统编程     │  ctypes, cffi, subprocess, asyncio              │
└──────────────┴───────────────────────────────────────────────────┘

行业洞察:根据Stack Overflow 2024年开发者调查,Python连续多年位居"最受欢迎编程语言"前三,在数据科学、AI/ML领域使用率超过70%。Python也是GitHub上贡献者数量最多的语言之一。


1.2 Python版本选择策略

1.2.1 Python 2与Python 3

Python 2已于2020年1月1日正式停止维护(EOL),所有新项目必须使用Python 3。主要不兼容差异:

python
# Python 2                          # Python 3
print "Hello"                       print("Hello")
5 / 2      # → 2 (整数除法)          5 / 2      # → 2.5 (浮点除法)
5 // 2     # → 2                     5 // 2     # → 2
str        # → 字节字符串             str        # → Unicode字符串
unicode    # → Unicode字符串          (已移除)
range      # → 返回列表               range      # → 返回迭代器
xrange     # → 返回迭代器             (已移除)

1.2.2 版本选择决策矩阵

场景推荐版本理由
学习入门3.12+最佳错误提示、最新语法特性
生产环境3.10+稳定、生态支持完善、模式匹配
数据科学3.10+主流库全面支持
遗留维护3.8+最低安全支持版本

最佳实践:在pyproject.tomlsetup.cfg中明确声明python_requires,确保项目运行在受支持的Python版本上。


1.3 环境搭建

1.3.1 Windows安装

方法一:官网安装(推荐)

  1. 访问 https://www.python.org/downloads/
  2. 下载最新稳定版安装包
  3. 运行安装程序,务必勾选"Add Python to PATH"
  4. 选择"Customize installation",确保勾选:
    • pip
    • tcl/tk and IDLE
    • Python test suite
    • py launcher

方法二:winget命令安装

powershell
winget install Python.Python.3.12

方法三:Microsoft Store

适用于轻量使用场景,但存在路径限制,不推荐专业开发使用。

验证安装:

powershell
python --version
# Python 3.12.x

pip --version
# pip 24.x from ...

python -c "import sys; print(sys.executable)"
# 显示Python解释器路径

1.3.2 macOS安装

方法一:Homebrew(推荐)

bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install python@3.12

python3 --version

方法二:pyenv(多版本管理)

bash
brew install pyenv

pyenv install 3.12.0
pyenv global 3.12.0

pyenv versions

1.3.3 Linux安装

bash
# Ubuntu/Debian
sudo apt update
sudo apt install python3.12 python3.12-venv python3.12-dev python3-pip

# Fedora
sudo dnf install python3.12 python3.12-devel

# Arch Linux
sudo pacman -S python

# 从源码编译(需要时)
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
tar xzf Python-3.12.0.tgz
cd Python-3.12.0
./configure --enable-optimizations --with-lto
make -j$(nproc)
sudo make altinstall

1.3.4 环境变量配置

Windows:

安装时勾选"Add Python to PATH"会自动配置。如需手动配置:

  1. 右键"此电脑" → "属性" → "高级系统设置" → "环境变量"
  2. 在系统变量"Path"中添加:
    • C:\Python312\
    • C:\Python312\Scripts\

Linux/macOS:

编辑 ~/.bashrc~/.zshrc

bash
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

1.4 开发工具体系

1.4.1 交互式解释器(REPL)

Python REPL(Read-Eval-Print Loop)是快速实验和学习的重要工具:

python
$ python
Python 3.12.0 (main, Oct  2 2023, 10:00:00) [MSC v.1935 64 bit (AMD64)]
Type "help", "copyright", "credits" or "license" for more information.
>>> 2 + 3
5
>>> import this
... (The Zen of Python)
>>> help(str)
... (str类的帮助文档)
>>> dir(str)
... (str类的所有属性和方法)

增强型REPL推荐:

bash
# IPython - 增强交互式Shell
pip install ipython
ipython

# 特性:语法高亮、自动补全、魔术命令、历史记录
In [1]: %timeit sum(range(1000))
In [2]: obj?<Tab>  # 对象内省
In [3]: %run script.py  # 运行脚本

1.4.2 集成开发环境

VS Code(推荐初学者与全栈开发者)

必备扩展:

  • Python(Microsoft)- 核心语言支持
  • Pylance - 高性能语言服务器,提供智能补全与类型检查
  • Python Debugger - 调试支持
  • Ruff - 快速代码检查与格式化
  • Python Test Explorer - 测试运行器

推荐配置(.vscode/settings.json):

json
{
    "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
    "python.analysis.typeCheckingMode": "basic",
    "python.analysis.autoImportCompletions": true,
    "editor.formatOnSave": true,
    "[python]": {
        "editor.defaultFormatter": "charliermarsh.ruff",
        "editor.codeActionsOnSave": {
            "source.organizeImports": "explicit"
        }
    },
    "python.testing.pytestEnabled": true
}

PyCharm(推荐专业Python开发者)

  • Community版:免费,适合纯Python开发
  • Professional版:付费,支持Web开发、数据库工具、远程开发

Jupyter Notebook/Lab(推荐数据科学与教学)

bash
pip install jupyterlab
jupyter lab

1.4.3 在线开发环境

无需本地安装,适合快速实验:

  • Google Colab - 免费GPU/TPU,适合深度学习
  • Replit - 即时协作开发
  • GitHub Codespaces - 云端VS Code

1.5 虚拟环境与依赖管理

1.5.1 为什么需要虚拟环境

在多项目开发中,不同项目可能依赖同一包的不同版本。虚拟环境通过创建隔离的Python运行环境解决此问题:

系统Python 3.12

├── 项目A虚拟环境
│   ├── Django 4.2
│   ├── requests 2.31
│   └── Python 3.12

├── 项目B虚拟环境
│   ├── Django 5.0
│   ├── httpx 0.25
│   └── Python 3.12

└── 项目C虚拟环境
    ├── FastAPI 0.104
    ├── SQLAlchemy 2.0
    └── Python 3.11

1.5.2 venv(标准库方案)

bash
# 创建虚拟环境
python -m venv .venv

# Windows激活
.venv\Scripts\activate

# Linux/macOS激活
source .venv/bin/activate

# 验证
which python        # Linux/macOS
where python        # Windows

# 退出
deactivate

1.5.3 conda(数据科学方案)

bash
# 安装Miniconda(轻量版)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

# 创建环境
conda create -n ml-project python=3.12 numpy pandas scikit-learn

# 激活
conda activate ml-project

# 导出环境
conda env export > environment.yml

# 从配置恢复
conda env create -f environment.yml

1.5.4 uv(现代高性能方案)

uv是由Astral团队(Ruff的开发者)用Rust编写的极速Python包管理器:

bash
# 安装
pip install uv

# 创建虚拟环境并安装包
uv venv
uv pip install requests flask

# 从requirements.txt安装(速度比pip快10-100倍)
uv pip install -r requirements.txt

1.5.5 Poetry(现代项目管理方案)

bash
# 安装
pip install poetry

# 创建新项目
poetry new myproject

# 初始化现有项目
poetry init

# 添加依赖
poetry add requests
poetry add pytest --group dev

# 安装所有依赖
poetry install

# 运行命令
poetry run python main.py

# 构建发布
poetry build

pyproject.toml示例:

toml
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = "A sample project"
authors = ["Your Name <your.email@example.com>"]

[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.31"

[tool.poetry.group.dev.dependencies]
pytest = "^7.4"
black = "^23.0"
mypy = "^1.5"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

1.6 包管理

1.6.1 pip核心操作

bash
# 安装
pip install requests
pip install requests==2.31.0
pip install "requests>=2.28,<3.0"
pip install requests[security]

# 升级
pip install --upgrade requests

# 卸载
pip uninstall requests

# 查询
pip list
pip show requests
pip outdated

# 依赖管理
pip freeze > requirements.txt
pip install -r requirements.txt

# 安全审计
pip audit

1.6.2 requirements.txt规范

# 精确版本 - 生产环境推荐
requests==2.31.0
flask==3.0.0

# 兼容版本 - 允许补丁更新
numpy~=1.26.0    # >=1.26.0, <1.27.0

# 最小版本 - 允许次版本更新
django>=4.2,<5.1

# 可选依赖
redis>=5.0.0     ; platform_system != "Windows"
pywin32>=306     ; platform_system == "Windows"

1.6.3 国内镜像加速

bash
# 临时使用
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

# 永久配置
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
镜像源URL
清华大学https://pypi.tuna.tsinghua.edu.cn/simple
阿里云https://mirrors.aliyun.com/pypi/simple
中国科技大学https://pypi.mirrors.ustc.edu.cn/simple
豆瓣https://pypi.doubanio.com/simple

1.7 第一个Python程序

1.7.1 交互式运行

python
>>> print("Hello, Python!")
Hello, Python!
>>> 1 + 2 + 3
6
>>> "Python " * 3
'Python Python Python '
>>> type(42)
<class 'int'>
>>> help(print)

1.7.2 脚本文件运行

创建 hello.py

python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""我的第一个Python程序

这是一个简单的入门示例,演示Python脚本的基本结构。
"""

import sys


def greet(name: str) -> str:
    """生成问候语

    Args:
        name: 被问候者的名字

    Returns:
        格式化的问候字符串
    """
    return f"你好,{name}!欢迎进入Python的世界!"


def main() -> None:
    """主函数"""
    print("Hello, Python!")

    name = input("请输入你的名字:").strip()
    if not name:
        print("未输入名字,使用默认值。")
        name = "世界"

    message = greet(name)
    print(message)


if __name__ == "__main__":
    main()

运行方式:

bash
python hello.py
chmod +x hello.py && ./hello.py    # Linux/macOS

1.7.3 程序结构解析

python
#!/usr/bin/env python3        # Shebang行,指定解释器(Unix系统)
# -*- coding: utf-8 -*-       # 源文件编码声明(Python 3默认UTF-8,可省略)

"""模块文档字符串

描述模块的功能、作者、创建日期等信息。
可通过 module.__doc__ 访问。
"""

import os                      # 标准库导入
import sys

import requests                # 第三方库导入

from mypackage import mymodule # 本地模块导入


CONSTANT = "常量值"             # 模块级常量


class MyClass:                 # 类定义
    """类的文档字符串"""
    pass


def function():                # 函数定义
    """函数的文档字符串"""
    pass


def main() -> None:            # 主函数
    """程序入口"""
    pass


if __name__ == "__main__":     # 入口判断
    main()

工程实践if __name__ == "__main__" 模式确保模块既可以作为脚本直接运行,也可以被其他模块导入而不执行主逻辑。这是Python项目的标准入口模式。


1.8 代码风格与规范

1.8.1 PEP 8编码规范

PEP 8是Python官方代码风格指南,是Python社区最重要的编码约定:

python
# 缩进:4个空格(禁止使用Tab)
def function():
    if True:
        print("使用4个空格缩进")

# 行宽:最多79字符(文档字符串/注释72字符)
long_variable_name = (
    "这是一个很长的字符串,"
    "使用括号隐式续行"
)

# 空行规则
class MyClass:                  # 类定义前2个空行
    """类的文档字符串"""

    def method1(self):          # 方法间1个空行
        pass

    def method2(self):
        pass


def top_level_function():       # 顶层函数间2个空行
    pass


# 导入规范
import os                       # 标准库
import sys

import numpy as np              # 第三方库
import requests

from mypackage import mymodule  # 本地模块

# 空格规则
x = 1                           # 赋值运算符两侧各一个空格
y = x + 2                       # 算术运算符两侧各一个空格
result = function(arg1, arg2)   # 逗号后一个空格,括号内无空格

1.8.2 命名规范

python
# 变量和函数:snake_case
user_name = "Alice"
def calculate_total_price():
    pass

# 常量:UPPER_SNAKE_CASE
MAX_CONNECTIONS = 100
DEFAULT_TIMEOUT = 30
PI = 3.14159265

# 类名:PascalCase(大驼峰)
class UserProfile:
    pass

class HTTPServer:
    pass

# 模块和包:short_lowercase
# my_module.py, mypackage/

# 私有属性:单下划线前缀(约定,非强制)
class MyClass:
    def _internal_method(self):     # 内部使用
        pass

# 名称修饰:双下划线前缀(触发名称修饰机制)
class MyClass:
    def __mangled_method(self):     # _MyClass__mangled_method
        pass

# 魔术方法:双下划线包围
class MyClass:
    def __init__(self):             # 构造器
        pass

    def __repr__(self):             # 官方字符串表示
        pass

    def __str__(self):              # 非官方字符串表示
        pass

1.8.3 类型注解

Python 3.5+支持类型注解(Type Hints),提升代码可读性和IDE支持:

python
from typing import Optional, list, Union

def greet(name: str, formal: bool = False) -> str:
    if formal:
        return f"Good day, {name}."
    return f"Hi, {name}!"

def find_user(user_id: int) -> Optional[dict]:
    """返回用户信息,未找到则返回None"""
    pass

def process(data: Union[str, bytes]) -> str:
    """接受str或bytes,返回str"""
    pass

# Python 3.10+ 使用 | 语法
def process(data: str | bytes) -> str:
    pass

def find_user(user_id: int) -> dict | None:
    pass

1.8.4 代码质量工具链

bash
# Ruff - 超快速代码检查与格式化(推荐,替代flake8+isort+black)
pip install ruff
ruff check .                    # 检查
ruff format .                   # 格式化
ruff check --fix .              # 自动修复

# mypy - 静态类型检查
pip install mypy
mypy mycode.py

# pre-commit - Git钩子自动化
pip install pre-commit

.pre-commit-config.yaml:

yaml
repos:
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.4.0
    hooks:
      - id: ruff
        args: [--fix]
      - id: ruff-format
  - repo: https://github.com/pre-commit/mirrors-mypy
    rev: v1.10.0
    hooks:
      - id: mypy

1.9 前沿技术动态

1.9.1 Python 3.13 自由线程模式

Python 3.13引入了实验性的自由线程模式(Free-threaded CPython,PEP 703),这是Python历史上最重要的性能改进之一:

python
# 启用自由线程模式构建Python
# ./configure --disable-gil && make

# 检测是否运行在自由线程模式
import sys
if hasattr(sys, '_is_gil_enabled'):
    print(f"GIL enabled: {sys._is_gil_enabled()}")

影响与挑战

  • 多线程CPU密集型任务可获得真正的并行执行
  • C扩展需要重新适配以确保线程安全
  • 单线程性能可能略有下降(约10-15%)
  • 内存管理需要更细粒度的锁机制

1.9.2 子解释器(PEP 684)

Python 3.12引入了每解释器GIL,支持子解释器隔离:

python
import _interpreters

# 创建子解释器
interp_id = _interpreters.create()

# 在子解释器中执行代码
_interpreters.run_string(interp_id, "print('Hello from subinterpreter')")

# 销毁子解释器
_interpreters.destroy(interp_id)

1.9.3 JIT编译器(PEP 744)

Python 3.13引入实验性JIT编译器,采用copy-and-patch技术:

bash
# 启用JIT编译器
PYTHON_JIT=1 python your_script.py

1.9.4 现代开发工具演进

工具特点适用场景
uvRust实现,极速依赖解析新项目首选
RuffRust实现,一体化Linter/Formatter替代flake8/black
pyright微软类型检查器,速度快VS Code默认
ryeArmin Ronacher的全栈工具个人项目

1.9.5 Python在AI时代的新角色

Python在人工智能和机器学习领域的地位日益巩固:

  • PyTorch 2.0:引入torch.compile()动态编译
  • JAX:Google的函数式数值计算框架
  • Mojo:Python超集,兼容Python语法但性能提升68000倍
  • Codon:Python编译器,生成原生机器码

1.10 本章小结

本章系统介绍了Python语言的核心概念与开发环境搭建:

  1. 语言定位:Python以可读性和开发效率为核心设计目标,采用解释执行模型,字节码编译后由PVM执行
  2. 版本策略:所有新项目必须使用Python 3.10+,关注3.13+自由线程模式的演进
  3. 环境搭建:掌握各平台安装方法,理解环境变量配置
  4. 开发工具:VS Code+Ruff是当前最佳轻量组合,PyCharm适合大型项目
  5. 虚拟环境:venv满足基本需求,Poetry/uv提供现代项目管理体验
  6. 编码规范:PEP 8是社区共识,类型注解+mypy提升代码质量

1.11 练习题

基础题

  1. 在你的电脑上安装Python 3.12+,运行python -c "import sys; print(sys.version)"验证安装。

  2. 创建一个虚拟环境,安装requests库,编写脚本获取一个网页内容并输出状态码。

  3. 编写一个Python脚本,使用f-string输出你的姓名、年龄和爱好,要求包含类型注解。

进阶题

  1. 使用Poetry创建一个完整的项目结构,添加flask和pytest依赖,编写一个简单的"Hello World" Web应用。

  2. 配置VS Code的Python开发环境,安装Ruff扩展,确保保存时自动格式化和检查。

  3. 使用dis模块查看一个简单函数的字节码,理解Python的编译执行过程。

项目实践

  1. 环境搭建项目:搭建一个完整的Python开发环境,包括:
    • Python 3.12+安装
    • VS Code配置(含Ruff、mypy)
    • Git配置(含pre-commit钩子)
    • Poetry项目管理
    • 编写一个包含类型注解、文档字符串、单元测试的示例模块

思考题

  1. Python的解释执行模型相比编译执行有什么优势和劣势?在什么场景下这些差异最为显著?

  2. GIL对Python多线程编程的影响是什么?Python 3.13的自由线程模式如何解决这一问题?它带来了哪些新的挑战?

  3. 为什么PEP 8规范在Python社区如此重要?强制代码风格是否限制了编程自由?请从软件工程的角度分析。

1.12 延伸阅读

1.12.1 Python官方资源

1.12.2 语言设计与历史

1.12.3 进阶书籍

  • 《Fluent Python》 (Luciano Ramalho) — Python进阶经典
  • 《Python Cookbook》 (David Beazley) — 实用技巧合集
  • 《Effective Python》 (Brett Slatkin) — 最佳实践指南
  • 《Python Distilled》 (David Beazley) — 语言精髓

1.12.4 开发工具


下一章:第2章 基础语法

青少年创意编程 - 高中Python组 - 江苏省宿城中等专业学校