Python是什么
Python 诞生于 1991 年,由 Guido van Rossum 在荷兰国家数学和计算机科学研究所(CWI)发布。它的名字并非来自蟒蛇,而是源自英国喜剧团体 Monty Python 的《飞行马戏团》——这种幽默气质也贯穿了 Python 的文档和社区文化。
设计哲学:简洁与实用
Python 的核心设计哲学是让代码可读性接近自然语言。这体现在三个层面:语法层面用缩进表示代码块,而非大括号;语义层面提供高级数据结构,让复杂操作可以用一行表达;运行时层面采用解释执行,写完即可运行,无需编译链接。
# 读取文件并统计每行单词数,Python 只需几行
with open("data.txt") as f:
for line in f:
print(len(line.split()))
同样的功能在 C 语言中需要显式打开文件、分配缓冲区、检查 EOF、关闭文件句柄,代码量通常是 Python 的 5 到 10 倍。Python 的简洁不是"功能缩水",而是把常见模式内置到语言和标准库中。
语言性质:解释型、动态类型、自动内存管理
Python 是解释型语言。源代码由 Python 解释器逐行翻译成字节码并执行,不需要像 C/C++ 那样经过编译、链接生成可执行文件。这意味着开发周期极短:修改代码后立刻运行,无需等待编译。
# 解释执行的即时性:修改后立即生效
x = 10
print(x * 2) # 输出 20,无需编译步骤
Python 也是动态类型语言。变量类型在运行时自动推断,不需要像 Java 或 C 那样预先声明 int x 或 String s。一个变量可以先存整数,再存字符串,但这不是推荐做法:
# 动态类型:变量类型由赋值决定
value = 42 # 此时 value 是 int
value = "hello" # 现在 value 变成 str
value = [1, 2, 3] # 又变成 list
# 错误示例:对错误类型执行操作
value = "42"
print(value + 10) # TypeError: can only concatenate str to str
Python 还具备自动内存管理。对象创建后,Python 的垃圾回收机制会自动追踪引用计数,当对象不再被引用时释放内存。开发者不需要手动 malloc 和 free:
# 自动内存管理:对象生命周期由解释器处理
import sys
s = "a" * 10**6 # 创建一个巨大的字符串
print(sys.getrefcount(s)) # 查看引用计数,通常大于 1
s = None # 解除引用,内存将在适当时机释放
与其他语言的对比
与 Shell 脚本相比:Shell 擅长移动文件、管道文本,但遇到 GUI 应用、游戏开发、复杂数据结构时就力不从心。Python 既能做系统管理,也能做应用开发:
# Python 可以调用系统命令,也能做 Shell 不擅长的事
import subprocess
result = subprocess.run(["ls", "-l"], capture_output=True, text=True)
print(result.stdout) # 获取命令输出并进一步处理
# Shell 难以实现的 GUI 提示框,Python 轻松做到
import tkinter
from tkinter import messagebox
messagebox.showinfo("提示", "任务完成") # 弹出图形对话框
与 C/C++/Java 相比:这些静态类型语言执行效率高,但开发周期长。定义一个简单的数据处理流程,C 语言需要处理类型声明、内存分配、错误码检查;Python 则直接表达意图:
# 读取 CSV 并筛选数据,Python 的表达力
import csv
with open("sales.csv") as f:
reader = csv.DictReader(f)
high_value = [row for row in reader if float(row["amount"]) > 1000]
与 Perl/Awk 相比:Perl 和 Awk 在文本处理领域很强,但语法晦涩,代码难以维护。Python 用更清晰的结构解决同样的问题,而且适用范围远超文本处理:
# 正则匹配并提取分组,Python 语法更清晰
import re
text = "Email: user@example.com"
match = re.search(r"(\w+)@(\w+\.\w+)", text)
if match:
print(match.group(1)) # user
print(match.group(2)) # example.com
适用场景
Python 的模块化和丰富的标准库让它几乎无处不在。标准库涵盖 I/O、系统调用、网络套接字、图形界面(tkinter)、数据库、多线程等,开箱即用:
# 标准库示例:无需安装第三方包即可实现常见功能
import os
import json
import urllib.request
# 路径操作
print(os.path.join("home", "user", "docs")) # home/user/docs
# JSON 序列化
data = {"name": "Python", "version": 3.12}
print(json.dumps(data, indent=2))
# 简单的 HTTP 请求
with urllib.request.urlopen("https://api.github.com") as resp:
print(resp.status) # 200
在自动化运维领域,Python 可以批量重命名文件、处理日志、生成报表;在 Web 开发中,Django 和 Flask 是主流框架;数据科学和人工智能领域,NumPy、pandas、TensorFlow 构成了完整生态。Python 还常被用作胶水语言,把 C/C++ 写的高性能模块粘合在一起:
# Python 调用 C 扩展的典型模式(伪代码示意)
# import fast_core # C 模块提供高性能计算
# result = fast_core.compute(data) # Python 负责调度,C 负责运算
可扩展性
Python 的"可扩展"是双向的。一方面,可以用 C/C++ 为 Python 编写扩展模块,把性能瓶颈部分用编译型语言实现;另一方面,可以把 Python 解释器嵌入到 C 程序中,让现有应用获得脚本能力:
# 纯 Python 实现斐波那契,便于理解算法
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)
# 对于性能敏感场景,可用 C 扩展替换
# 但接口保持不变,调用方无需修改代码
Python 3.12 的关键改进
Python 3.12 在语法和性能上都有显著进步。类型形参语法简化(PEP 695)让泛型函数更易写:
# Python 3.12 之前,需要显式导入 TypeVar
# from typing import TypeVar
# T = TypeVar("T")
# def first(items: list[T]) -> T: ...
# Python 3.12 直接内联声明
def first[T](items: list[T]) -> T:
return items[0]
print(first([1, 2, 3])) # 1,推断为 int
print(first(["a", "b"])) # a,推断为 str
f-string 的嵌套引号限制被解除(PEP 701),报错信息也更加精准。当把赋值运算符 = 误写成比较时,解释器会直接提示 "did you mean to use '=='?":
# 3.12 的错误提示更友好
x = 5
# if x = 5: # SyntaxError: did you mean to use '=='?
if x == 5:
print("正确")
学习建议
Python 的最佳学习方式是边读边练。启动解释器,把教程中的代码亲手输入一遍,观察输出,故意制造一些错误看看报错信息。比如尝试访问未定义的变量,理解 NameError 的含义:
>>> print(undefined_var)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'undefined_var' is not defined
这种即时反馈是解释型语言的优势——错误在输入后立即暴露,不需要等待编译阶段。