一、简介
1.1 Python 特性
解释型语言:代码无需编译可直接运行,适合快速开发。
动态类型:变量类型在运行时确定(如x=1后x="str"仍合法)。
面向对象:支持类、对象、继承等特性,代码可复用性强。
语法简洁:通过缩进区分代码块,减少括号等冗余符号。
1.2 应用场景
数据分析:Pandas、Numpy 等库处理结构化数据。
人工智能:TensorFlow、PyTorch 构建机器学习模型。
Web 开发:Django、Flask 框架开发网站。
自动化脚本:批量处理文件、系统运维自动化。
二、Python 基础语法
2.1 字面量与数据类型
核心关联点:可变与不可变类型
类型 |
是否可变 |
存储特点 |
典型应用 |
整数(int) |
不可变 |
直接存储数值 |
计数、索引 |
浮点数(float) |
不可变 |
存储小数,存在精度误差(如0.1+0.2≠0.3) |
科学计算 |
字符串(str) |
不可变 |
字符序列,支持切片操作 |
文本处理 |
列表(list) |
可变 |
有序元素集合,可动态增删改 |
存储同类数据序列 |
元组(tuple) |
不可变 |
有序元素集合,不可修改 |
保护数据不被意外修改 |
字典(dict) |
可变 |
键值对映射,键需不可变(如 str) |
快速查询(类似通讯录) |
集合(set) |
可变 |
无序不重复元素,支持集合运算 |
去重、交集并集计算 |
易混淆点:
- 字符串、元组虽不可变,但可通过拼接生成新对象(如s = "a"; s += "b"实际生成新字符串)。
- 字典的键必须为不可变类型(如dict[{1:2}]会报错,因列表可变)。
2.2 运算符优先级(由高到低)
示例对比:
- 3 + 4 * 2 → 先算4*2=8,再算3+8=11(乘优先于加)。
- 3 * 2 ** 2 → 先算2**2=4,再算3*4=12(指数优先于乘法)。
2.3 字符串操作核心方法
易混淆方法对比
方法 |
作用 |
是否修改原字符串 |
示例 |
split() |
按分隔符分割成列表 |
否 |
"a,b,c".split(",") → ["a","b","c"] |
join() |
用指定字符连接列表 |
否 |
",".join(["a","b","c"]) → "a,b,c" |
strip() |
去除首尾指定字符(默认空格) |
否 |
" abc ".strip() → "abc" |
replace() |
替换子串 |
否 |
"abc".replace("a","x") → "xbc" |
upper()/lower() |
转大小写 |
否 |
"AbC".upper() → "ABC" |
三、流程控制:判断与循环
3.1 if 基本格式
# 示例代码
age = 20
if age >= 18:
print("成年了")
print("可以投票了")
if-elif-else 语句
# 示例代码
height = int(input("请输入身高(cm): "))
vip_level = int(input("请输入VIP等级:"))
if height < 120:
print("免费游玩")
elif vip_level > 3:
print("VIP免费")
else:
print("需要购票")
3.2 循环结构对比
循环类型 |
适用场景 |
核心特点 |
跳出方式 |
for 循环 |
已知次数的遍历(如列表、字符串) |
按元素遍历,无需手动控制计数器 |
break/continue |
while 循环 |
未知次数的循环(如用户输入验证) |
条件为真时执行,需手动更新条件变量 |
break/continue |
典型案例:
for 循环:遍历列表求最大值
# 示例代码
name = "python"
for char in name:
print(char)
while 循环:猜数字游戏
# 示例代码
i = 0
while i < 5:
print(i)
i += 1
四、函数与数据容器
4.1 函数参数传递机制
可变与不可变参数对比
参数类型 |
传递方式 |
修改影响 |
示例 |
不可变类型(int/str/tuple) |
值传递 |
函数内修改不影响外部变量 |
def f(x): x=2; a=1; f(a); print(a) → 1 |
可变类型(list/dict/set) |
引用传递 |
函数内修改会影响外部变量 |
def f(l): l.append(0); a=[1]; f(a); print(a) → [1,0] |
4.2 数据容器核心操作对比
列表、元组、字典、集合常用方法
操作 |
列表(list) |
元组(tuple) |
字典(dict) |
集合(set) |
创建 |
[1,2] |
(1,2) 或 1,2 |
{'a':1} |
{1,2} 或 set([1,2]) |
新增元素 |
append()/insert() |
不可新增(报错) |
dict[key]=value |
add()/update() |
删除元素 |
pop()/remove() |
不可删除(报错) |
pop(key) |
remove()/discard()/pop() |
访问元素 |
lst[0] |
tup[0] |
dict[key] 或 get(key) |
不可直接访问(无序) |
遍历 |
for x in lst |
for x in tup |
for k in dict 或 for k,v in dict.items() |
for x in set |
常用内置函数 |
len()/max()/min()/sorted() |
len()/max()/min()/sorted() |
len()/keys()/values()/items() |
len()/union()/intersection() |
数据容器对比
类型 |
元素类型 |
有序 |
可变 |
重复元素 |
列表(List) |
任意 |
是 |
是 |
支持 |
元组(Tuple) |
任意 |
是 |
否 |
支持 |
字典(Dict) |
Key 必须不可变,Value 任意 |
否 |
是 |
Key 不支持重复 |
集合(Set) |
任意 |
否 |
是 |
不支持 |
字符串(Str) |
字符 |
是 |
否 |
支持 |
五、文件操作与异常处理
5.1 文件操作三模式对比
模式 |
读写权限 |
文件不存在时 |
典型应用 |
r |
只读 |
报错 |
读取配置文件 |
w |
写入(覆盖原内容) |
创建新文件 |
重新生成日志文件 |
a |
追加写入 |
创建新文件 |
追加日志记录 |
安全写法:使用with open自动关闭文件
# 读取文件(推荐)
with open("data.txt", "r", encoding="utf-8") as f:
content = f.read()
# 写入文件(推荐)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("Hello World")
5.2 异常处理流程
典型案例:
try:
num = int(input("输入数字: "))
result = 10 / num
except ValueError:
print("请输入有效数字")
except ZeroDivisionError:
print("不能除以0")
except Exception as e:
print(f"未知错误: {e}")
else:
print(f"计算结果: {result}")
finally:
print("程序执行完毕")
六、模块与面向对象编程
6.1 模块导入方式对比
导入方式 |
语法 |
命名空间影响 |
适用场景 |
导入整个模块 |
import math |
math.sqrt(4) |
避免命名冲突 |
导入指定功能 |
from math import sqrt |
sqrt(4) |
简化代码书写 |
导入所有功能 |
from math import * |
可能覆盖同名变量 |
快速原型开发 |
模块别名 |
import math as m |
m.sqrt(4) |
长模块名简化 |
6.2 面向对象核心概念
封装、继承、多态对比
概念 |
定义 |
代码示例 |
封装 |
隐藏内部实现,只暴露必要接口 |
class Person: __age=18; def get_age(): return self.__age |
继承 |
子类复用父类代码 |
class Student(Person): pass |
多态 |
同一方法不同实现(动态绑定) |
def func(obj): obj.sound(); dog=Dog(); bird=Bird(); func(dog); func(bird) |