一、简介
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 / numexcept 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) |