{T}

Python 简介

概述

Python 是一种解释型高级编程语言,具备动态类型与自动内存管理能力。它支持多范式编程(过程式、面向对象、函数式),强调代码可读性与简洁语法,并以缩进作为代码块的结构标识。本文以 CPython 为主要参考实现,面向初学者与工程实践者提供结构化概览。

核心能力概览:

  • 易读语法与开发效率
  • 完整标准库与成熟生态
  • 跨平台运行与良好可移植性
  • 丰富的工程实践与社区支持

术语与约定

术语含义说明
Python语言规范与生态总称指语言语法、标准库与第三方生态
实现(实现体)Python 语言的具体实现CPython、PyPy、MicroPython 等
解释器执行 Python 代码的运行程序常见为 CPython 解释器
标准库随 Python 一同发布的库例如 pathlibjson
第三方库通过包管理器安装的库例如 requestsnumpy
虚拟环境项目级依赖隔离的运行环境例如 venvconda
包管理器安装与管理依赖的工具例如 pippoetry

系统架构与执行流程

以 CPython 为例,代码从源码到执行的大致流程如下图所示:

图表渲染中…

核心功能模块与标准库

Python 的核心能力主要由运行时与标准库提供,常用模块可按场景分类:

场景说明常用模块
数据结构与算法高效组织与遍历数据collectionsitertoolsheapq
并发与异步多线程、多进程与协程threadingmultiprocessingasyncio
IO 与文件文件与路径处理pathlibioosshutil
网络与协议基础网络与数据交换sockethttpurllibjson
数据持久化本地存储与交换格式sqlite3csvpickle
工具与调试日志、命令行与类型loggingargparsetypingdataclasses

内置 API 接口说明

Python 的 API 主要分为内置函数与标准库接口两层:

API 类型主要范围典型接口说明
内置函数解释器全局可用printlensumzip无需导入,直接使用
标准库随解释器发布pathlib.Pathjson需显式导入
第三方库通过安装获得requestsnumpy需安装后导入

使用示例:

python
numbers = [1, 2, 3, 4]
# 计算列表总和
total = sum(numbers)
# 将两个序列组合为键值对字典
mapping = dict(zip(["a", "b"], [1, 2]))
print(total, mapping)
python
from pathlib import Path
import json

# 读取文本文件并解析 JSON
data = json.loads(Path("config.json").read_text(encoding="utf-8"))
# 安全获取配置项并设置默认值
timeout = data.get("timeout", 10)
print(timeout)

接口使用约定:

  • 内置函数适合基础操作与快速验证
  • 标准库适合生产级通用能力
  • 第三方库适合高阶能力与特定领域需求
Python 的命名由来

Python 由 Guido van Rossum(吉多·范罗苏姆)在 1989 年开始设计,并于 1991 年发布首个版本。Python 的命名与蟒蛇无关,而是来源于 Guido 喜欢的英国喜剧团体 Monty Python(巨蟒剧团)。这也解释了为什么社区中常出现与 Monty Python 相关的彩蛋和引用。

Python 的特点

简洁易读

Python 语法简单明了,接近自然语言,使得代码易于阅读和编写。相比其他语言,Python 通常可用更少的代码完成同样的任务。

丰富的库

Python 提供完善的标准库,覆盖网络、文件、GUI、数据库、文本等常用能力。除标准库外,还有大量成熟的第三方库可直接使用。

跨平台

Python 可以在多种操作系统上运行,包括 Windows、Linux、macOS 等,使得程序具备良好的可移植性。

开源

Python 是开源的,任何人都可以免费使用和分发。这促进了社区的快速发展,使生态系统不断丰富。

缺点

运行速度慢

Python 通常比 C/C++ 慢,主要原因在于解释执行与动态类型带来的运行时开销。对于性能敏感的部分,常见优化方式包括使用高性能库、改进算法、引入并行或 JIT 解释器。

例如开发一个下载 MP3 的网络应用程序,C 程序的运行时间需要 0.001 秒,而 Python 程序的运行时间需要 0.1 秒,慢了 100 倍,但由于网络更慢,需要等待 1 秒。用户是不能感觉到 1.001 秒和 1.1 秒的区别

代码不能加密

发布 Python 程序通常会包含可读的源码或字节码。生产环境更推荐通过服务端部署、权限控制与依赖隔离来降低代码暴露风险,而不是依赖“加密源码”作为主要安全手段。

该限制主要影响以“分发软件授权”为主的商业模式。在当前互联网时代,服务型模式更常见,此时通常不需要向外部交付源码。

DANGER

互联网上有无数非常优秀的像 Linux 一样的开源代码,千万不要高估自己写的代码真的有非常大的“商业价值”。

那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源就没人敢用他们的产品

应用领域

Python 在许多领域都有广泛应用:

Web 开发

许多大型网站就是用 Python 开发的,例如 YouTubeInstagram,还有国内的豆瓣。很多大公司包括 GoogleYahoo 等也在广泛使用 Python

数据科学与人工智能

Python 是数据分析和机器学习的首选语言,拥有强大的数据分析和可视化库,如 NumPy、Pandas、Matplotlib、TensorFlow 等

自动化脚本

Python 非常适合编写系统管理、自动化测试、网络管理等脚本,可以大大提高工作效率。Python 的简洁语法使得编写自动化脚本变得非常高效。

游戏开发

Python 有 Pygame 等库可以用于游戏开发,虽然不是主流选择,但对于一些小游戏和原型开发非常合适。一些知名游戏如《文明 IV》的部分功能就是用 Python 开发的。

桌面应用

Python 有 Tkinter、PyQt、wxPython 等库可以开发桌面应用程序。虽然性能不如原生应用,但对于中小型应用来说已经足够。

网络爬虫

Python 拥有强大的网络爬虫库,如 Scrapy、BeautifulSoup、Requests 等,使得数据采集变得简单高效。

科学计算

Python 在科学计算领域也有广泛应用,SciPy、SymPy 等库为科学计算提供了强大的支持。

学习资源

官方资源

开发工具

在线教程

配置参数详解

以下为常用运行时环境变量与行为配置,适用于多数解释器实现(以 CPython 为主):

参数名作用典型场景示例
PYTHONPATH扩展模块搜索路径临时加入自定义包目录PYTHONPATH=./src
PYTHONUTF8强制 UTF-8 文本模式统一编码行为PYTHONUTF8=1
PYTHONDONTWRITEBYTECODE禁止生成 .pyc只读环境或减少磁盘写入PYTHONDONTWRITEBYTECODE=1
PYTHONHASHSEED设置哈希随机种子可重复性实验PYTHONHASHSEED=0
PYTHONWARNINGS控制警告级别与过滤CI/测试环境PYTHONWARNINGS=default
PYTHONIOENCODING设置标准 IO 编码输出编码统一PYTHONIOENCODING=utf-8

使用示例:

bash
# 指定模块搜索路径并开启 UTF-8 模式
export PYTHONPATH=./src
export PYTHONUTF8=1
python -m myapp

说明:

  • 以上参数均为进程级配置,只影响当前 Python 进程及其子进程
  • 若使用虚拟环境,建议将长期配置写入项目级脚本或启动命令

系统架构补充视图

Python 运行时与生态的层次结构可简化理解为如下结构:

图表渲染中…

GIL 机制与多线程限制

CPython 中的 GIL(Global Interpreter Lock,全局解释器锁) 是一个互斥锁,它确保同一时刻只有一个线程执行 Python 字节码。这是 Python 运行速度慢的根本原因之一,也是多线程无法真正并行的原因。

GIL 的工作机制

图表渲染中…

关键参数sys.getswitchinterval() 默认为 0.005 秒(5ms),即每隔 5ms 线程会主动释放 GIL 让其他线程执行。

python
import sys
print(sys.getswitchinterval())  # 输出: 0.005 (5ms)

GIL 的影响范围

场景GIL 影响解决方案
CPU 密集型任务❌ 多线程无法加速使用 multiprocessing 或 C 扩展释放 GIL
IO 密集型任务✅ 影响较小使用 threadingasyncio
混合型任务⚠️ 部分受限IO 用线程/协程,CPU 用进程池
NumPy/Pandas 运算✅ 不受 GIL 限制底层 C 代码在运算时释放 GIL
为什么 CPython 需要 GIL?

CPython 的内存管理(引用计数)不是线程安全的。如果没有 GIL,多个线程同时修改对象的引用计数会导致内存泄漏或提前释放。GIL 是以简单粗暴的方式保证线程安全的折中方案。

Python 版本对比

Python 主要有两个版本:Python 2 和 Python 3。Python 3 在 2008 年发布,不兼容 Python 2。Python 2 已于 2020 年 1 月 1 日停止官方支持。

Python 2 vs Python 3 核心差异

维度Python 2.7Python 3.x
维护状态❌ 2020 年已停止维护✅ 活跃开发中
print 语法print "hello" (语句)print("hello") (函数)
整数除法3/2 = 1 (截断)3/2 = 1.5 (真除法)
字符串类型ASCII str + unicodestr(Unicode) + bytes
默认编码ASCIIUTF-8
迭代器range() 返回列表range() 返回惰性迭代器
异常语法except Exception, e:except Exception as e:
推荐度❌ 不推荐新项目使用✅ 强烈推荐

Python 3 版本选择建议

图表渲染中…
版本关键特性推荐场景
Python 3.8+海象运算符 :=、仅位置参数 /最低兼容性要求
Python 3.9+字典合并 |、内置泛型 list[int]旧项目兼容基线
Python 3.10+结构模式匹配 match/case、参数规格需要模式匹配的项目
Python 3.11+性能提升 10-60%、Self 类型、ExceptionGroup追求性能的项目
Python 3.12+类型语句 type、f-string 支持更多表达式最新特性与性能
Python 3.13+实验性 free-threaded 模式(PEP 703)、JIT 编译器(PEP 744)前沿性能探索
Python 3.14(当前最新)PEP 649/749 延迟注解求值、PEP 750 模板字符串 t"..."、PEP 734 多解释器、PEP 768 外部调试器、bytearray.resize()新项目推荐(推荐
INFO

Python 3.0 版本在 2008 年发布,它并不完全兼容之前的 Python 代码,但因为目前还有不少公司在项目和运维中使用 Python 2.x 版本,所以 Python 3.x 的很多新特性后来也被移植到 Python 2.6/2.7 版本中。

注意:Python 2 已于 2020 年停止维护,强烈建议所有新项目使用 Python 3

检查 Python 版本

bash
# 检查 Python 版本
python --version
# 或
python3 --version

# 在 Python 解释器中查看版本
python
>>> import sys
>>> print(sys.version)

Python 之禅

Python 社区的理念都包含在 Tim Peters 撰写的“Python 之禅”中。要获悉这些有关编写优秀 Python 代码的指导原则,只需在解释器中执行命令 import this

python
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly. # 优美胜于丑陋(Python 以编写优美的代码为目标)
Explicit is better than implicit. # 明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
Simple is better than complex. # 简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
Complex is better than complicated. # 复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
Flat is better than nested. # 扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
Sparse is better than dense. # 间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
Readability counts. # 可读性很重要(优美的代码是可读的)
Special cases aren't special enough to break the rules. 即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
Although practicality beats purity. # 不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess. # 当存在多种可能,不要尝试去猜测
There should be one-- and preferably only one --obvious way to do it. # 而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法)
Although that way may not be obvious at first unless you're Dutch. # 虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido )
Now is better than never. # 做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea. # 如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those! # 命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)
Python 之禅 by Tim Peters

常见问题解答

Q: Python 2 和 Python 3 有什么区别?

A: Python 3 是 Python 的未来,主要区别包括:

  • print 从语句变为函数
  • 字符串默认使用 Unicode
  • 整数除法返回浮点数(使用 // 进行整数除法)
  • 许多内置函数返回迭代器而非列表

Q: Python 真的比 C/C++ 慢吗?

A: 是的,Python 作为解释型语言,执行速度通常比编译型语言慢。但对于大多数应用场景,Python 的速度已经足够,而且开发效率更高。对于性能关键的部分,可以使用 C 扩展或 Cython

Q: 如何提高 Python 代码性能?

A:

  • 使用适当的数据结构
  • 利用 NumPy 等高性能库
  • 使用生成器而非列表
  • 对关键部分使用 Cython 或 C 扩展
  • 使用 PyPy 解释器(JIT 编译)

Q: Python 适合大型项目吗?

A: 是的,许多大型项目都使用 Python,如 Instagram、YouTube、Dropbox 等。Python 的模块化设计和丰富的生态系统使其非常适合大型项目开发。

Q: 如何学习 Python?

A:

  1. 从基础语法开始
  2. 多写代码,多练习
  3. 阅读优秀的开源代码
  4. 参与开源项目
  5. 解决实际问题
  6. 加入 Python 社区

Q: 应该选择哪种解释器?

A: 默认选择 CPython 即可。需要兼容 C 扩展与生态时使用 CPython;关注极致性能且依赖较少时可评估 PyPy

Q: 安装依赖时出现网络或版本问题怎么办?

A: 优先检查 Python 版本与平台是否匹配,然后确认网络与镜像源可用,必要时指定镜像或升级 pip

Q: 为什么导入模块报错 ModuleNotFoundError

A: 常见原因包括:

  • 依赖未安装或安装在其他虚拟环境
  • PYTHONPATH 未包含模块路径
  • 使用了错误的解释器(如系统 Python 与虚拟环境混用)

Q: .pyc 文件是什么,是否可以删除?

A: .pyc 是字节码缓存文件,可加快启动速度。删除不会影响源码运行,解释器会在必要时重新生成。

Q: 如何统一团队的 Python 版本?

A: 建议使用 pyenvasdf 或 CI 统一版本,结合项目说明文件(如 .python-version)进行约束。

学习路线指引

本站推荐的学习路径(从基础语法到实战专题)已在 入门指南与学习路线Python 文档导航总览 中给出权威版本,建议以这两页为准。本文仅给出「基础」分类内的本地延伸阅读顺序。

延伸阅读

本章节是 Python 学习的起点,完成阅读后建议按以下顺序继续:

完成「基础」分类后,可前往 Python 文档导航总览 选择方向:爬虫、数据分析、Web 开发、自动化办公等场景专题。

术语表

术语英文定义
解释型语言Interpreted Language代码由解释器逐行执行而非预先编译为机器码
动态类型Dynamic Typing变量类型在运行时推断,无需预先声明
GILGlobal Interpreter LockCPython 的全局解释器锁,保证同一时刻只有一个线程执行字节码
CPythonCPython用 C 语言实现的 Python 解释器(官方默认实现)
字节码BytecodePython 源码编译后的中间指令,由 PVM 执行
PVMPython Virtual MachinePython 虚拟机,负责执行字节码
引用计数Reference CountingCPython 的主要内存管理机制,追踪对象被引用的次数
垃圾回收Garbage Collection自动回收不再被引用的对象占用的内存

版本差异(Python 3.8-3.12 → 3.14)

特性本文编写时Python 3.14
类型注解求值运行时立即求值PEP 649/749 延迟求值:注解不再在定义时执行,解决前向引用,提升启动性能
字符串模板普通 f-string / str.formatPEP 750 模板字符串 t"...":可插值且能被安全处理(3.14 新特性)
标准库多解释器无官方支持PEP 734:interpreter 模块支持在同一进程创建多个子解释器
调试仅 Python 内建 pdb / IDE 调试PEP 768:安全的 CPython 外部调试器接口(custom debugger protocol)
字节码与运行时3.12 前无 JIT3.13 引入实验性 JIT(PEP 744);3.14 进一步改进 free-threaded(无 GIL)构建
datetime APIutcnow() 常用3.12 起弃用,官方要求改用 datetime.now(tz=datetime.UTC)(aware 对象)
压缩算法zlib / gzip / bz2 / lzma3.14 新增标准库 Zstandard 支持(PEP 784)

本文讲解的语法与数据结构原理在 3.14 中依然成立;新项目建议基于 Python 3.13/3.14,并优先使用 aware datetime、PEP 649 注解与最新类型语法。