这篇文章将会系统地提炼 Python 的核心知识点、语法特性和编程风格,帮助你高效地建立完整的 Python 知识体系。
一、基础语法
1.1 变量与赋值
Python 不需要专门的关键字来声明变量,直接赋值即可。
- 赋值:
name = "张三" - 命名规范: 推荐使用
snake_case(下划线命名),如is_student。 - 空值: 使用
None表示空值。 - 布尔值: 只有
True和False,首字母必须大写。
Python
name = "张三"
age = 25
is_student = True
score = None
1.2 函数定义
使用 def 关键字定义函数,函数体通过 缩进 来界定。
- 定义: 使用
def关键字,后跟函数名和参数列表,以冒号:结束。 - 函数体: 必须缩进。
- 默认参数: 可以在参数列表中设置默认值,如
age=18。 lambda表达式: 用于创建简单的单行匿名函数。- f-string: 用于字符串格式化(类似模板字符串)。
Python
# 普通函数
def greet(name):
return f"Hello, {name}!"
# lambda 函数
add = lambda a, b: a + b
# 带默认参数的函数
def create_user(name, age=18):
return {"name": name, "age": age}
1.3 控制流程
1.3.1 条件语句
使用 if、elif(而不是 else if)和 else。代码块由冒号 : 和 缩进 确定。
- 三元表达式: 语法为
value_if_true if condition else value_if_false。
Python
if age >= 18:
print("成年人")
elif age >= 13:
print("青少年")
else:
print("儿童")
# 三元表达式
status = "成年" if age >= 18 else "未成年"
1.3.2 循环语句
1. for 循环: 主要用于迭代序列(列表、字符串等)或使用 range() 函数生成数字序列。
- 生成数字序列:
range(start, stop, step)。 - 带索引遍历: 使用
enumerate()函数同时获取索引和值。
Python
# 迭代数字 (0 到 4)
for i in range(5):
print(i)
# 遍历列表
fruits = ["apple", "banana", "orange"]
for fruit in fruits:
print(fruit)
# 带索引遍历
for index, fruit in enumerate(fruits):
print(index, fruit)
2. while 循环: 循环逻辑与大多数语言相似。
- 自增/自减: Python 没有
i++或i--语法,使用i += 1或i -= 1。
Python
i = 0
while i < 5:
print(i)
i += 1
二、数据类型
Python 是强类型语言,明确区分不同的数据类型。
2.1 基本数据类型
| 类型 | Python 名称 | 说明 |
|---|---|---|
| 字符串 | str |
单引号 ' 和双引号 " 完全等价。 |
| 整数 | int |
支持任意大小的整数。 |
| 浮点数 | float |
标准浮点数。 |
| 布尔值 | bool |
True 或 False。 |
| 空值 | None |
唯一的空值。 |
| 列表 | list |
可变的序列(类似数组)。 |
| 字典 | dict |
键值对集合(类似对象/Map)。 |
| 集合 | set |
无序、不重复的元素集合。 |
| 元组 | tuple |
不可变 的序列(Python 特有)。 |
2.2 数字运算
Python 明确区分整数和浮点数。
- 类型: 使用
type()函数获取类型,如type(42)返回<class 'int'>。 - 浮点除法:
/运算符(如5 / 2结果为2.5)。 - 整除:
//运算符(如5 // 2结果为2)。 - 幂运算:
**运算符(如5 ** 2结果为25)。
2.3 字符串操作
字符串是不可变的序列。
- 长度: 使用内置函数
len()获取长度,如len(str)。 - 方法:
str.upper()、str.lower()、str.split()、str.replace()等。 - 子串检查: 使用
in关键字,如"World" in str。 - 切片: 使用简洁的切片语法
[start:end](不包含end)。 - f-string: 最常用的格式化方式,如
f"你好, {name}!"。 - 多行字符串: 使用三引号
"""..."""或'''...'''创建。
Python
str = "Hello World"
print(len(str)) # 11
print("World" in str) # True
print(str[0:5]) # "Hello"
2.4 类型转换
Python 不会自动进行隐式类型转换,必须使用对应的类型构造函数进行显式转换。
str(value):转换为字符串。int(value):转换为整数。float(value):转换为浮点数。bool(value):转换为布尔值。
Python
print(int("5") + 3) # 8
print("5" + str(3)) # "53"
# print("5" + 3) # TypeError (不允许字符串和数字直接相加)
三、列表(List)和元组(Tuple)
3.1 列表 (List)
列表是 Python 中最常用的可变序列类型。
3.1.1 创建与访问
- 创建:
arr = [1, 2, 3]。 - 负索引: 支持负索引,
-1表示最后一个元素,-2表示倒数第二个元素。
Python
arr = [1, 2, 3, 4, 5]
print(arr[0]) # 1
print(arr[-1]) # 5
3.1.2 常用方法
| 功能 | Python 方法 | 说明 |
|---|---|---|
| 添加元素(末尾) | list.append(item) |
|
| 添加元素(任意位置) | list.insert(index, item) |
|
| 删除元素(末尾/指定索引) | list.pop() 或 list.pop(index) |
|
| 删除指定值 | list.remove(value) |
删除第一个匹配的值,找不到会报错。 |
| 删除指定索引 | del list[index] |
更通用的删除语法。 |
| 查找索引 | list.index(value) |
找不到会报错。 |
| 检查存在 | value in list |
使用 in 关键字。 |
| 排序 | list.sort() |
原地 排序(修改原列表)。 |
| 排序(返回新列表) | sorted(list) |
返回一个新的排序后的列表。 |
| 反转 | list.reverse() |
原地 反转。 |
| 长度 | len(list) |
使用 len() 函数。 |
3.1.3 强大的切片操作
切片是 Python 的核心特性之一,用于获取列表的子集。语法为 [start:end:step]。
Python
scss
arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(arr[2:5]) # [2, 3, 4] (从索引 2 到 5, 不含 5)
print(arr[:5]) # [0, 1, 2, 3, 4]
print(arr[5:]) # [5, 6, 7, 8, 9]
print(arr[-3:]) # [7, 8, 9] (最后 3 个元素)
print(arr[::2]) # [0, 2, 4, 6, 8] (每隔一个取一个)
print(arr[::-1]) # [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] (反转)
# 切片赋值 (修改列表)
arr[2:5] = [20, 30, 40]
3.2 列表推导式 (List Comprehension)
这是 Python 最优雅、最高效的特性之一,用于快速生成和转换列表。
- 基本形式:
[expression for item in iterable] - 带条件过滤:
[expression for item in iterable if condition]
Python
numbers = [1, 2, 3, 4, 5]
# 映射: [1, 4, 9, 16, 25]
squares = [x**2 for x in numbers]
# 过滤: [4, 16]
even_squares = [x**2 for x in numbers if x % 2 == 0]
# 扁平化嵌套列表
nested = [[1, 2], [3, 4]]
flat = [item for sublist in nested for item in sublist] # [1, 2, 3, 4]
3.3 元组 (Tuple)
元组是 Python 特有的不可变序列(只读)。一旦创建,元素不能修改。
- 创建:
point = (10, 20) - 解包: 元组支持解包,常用于函数返回多个值和变量交换。
Python
# 创建元组
rgb = (255, 128, 0)
# 解包
r, g, b = rgb
print(g) # 128
# 优雅地交换变量
a, b = 1, 2
a, b = b, a
# a 现在是 2, b 现在是 1
四、字典(Dict)
字典是 Python 的键值对集合,类似其他语言中的对象或 Map。
4.1 创建与访问
- 创建: 键必须是不可变类型(如字符串、数字、元组),值可以是任意类型。
- 访问: 只能使用括号语法
dict[key]。 - 安全访问: 推荐使用
dict.get(key, default_value),键不存在时返回None或默认值,避免KeyError。
Python
user = {
"name": "张三",
"age": 25,
"email": "zhangsan@example.com"
}
print(user["name"]) # "张三"
print(user.get("age")) # 25
print(user.get("phone", "未设置")) # "未设置" (键不存在,返回默认值)
# print(user.name) # 错误: 字典没有点语法访问
4.2 常用方法
| 功能 | Python 方法/语法 | 说明 |
|---|---|---|
| 获取所有键 | dict.keys() |
返回键的视图对象。 |
| 获取所有值 | dict.values() |
返回值的视图对象。 |
| 获取键值对 | dict.items() |
返回键值对的视图对象(包含元组)。 |
| 检查键存在 | key in dict |
|
| 删除键值对 | del dict[key] 或 dict.pop(key) |
pop 会返回被删除的值。 |
| 合并字典 | dict1.update(dict2) 或 {**dict1, **dict2} |
update 会修改原字典。 |
| 清空 | dict.clear() |
4.3 字典遍历
遍历字典最常用的方式是使用 dict.items() 方法。
Python
user = {"name": "张三", "age": 25, "city": "北京"}
# 遍历键值对 (最常用)
for key, value in user.items():
print(f"{key}: {value}")
# 遍历键
for key in user.keys():
print(key)
# 遍历值
for value in user.values():
print(value)
4.4 字典推导式 (Dict Comprehension)
与列表推导式类似,用于快速生成字典。
- 形式:
{key_expression: value_expression for item in iterable}
Python
numbers = [1, 2, 3, 4]
# {1: 1, 2: 4, 3: 9, 4: 16}
squared_dict = {x: x**2 for x in numbers}
# 带条件过滤
even_squared = {x: x**2 for x in numbers if x % 2 == 0} # {2: 4, 4: 16}
五、Python 独有的强大特性
5.1 集合 (Set)
集合是无序且元素唯一的集合。常用于去重和集合运算。
-
创建:
set1 = {1, 2, 3}。 -
去重:
unique = list(set(numbers))。 -
集合运算:
- 并集:
set1 | set2或set1.union(set2) - 交集:
set1 & set2或set1.intersection(set2) - 差集:
set1 - set2
- 并集:
5.2 多重赋值与解包
Python 允许在一个语句中为多个变量赋值,并支持序列解包。
Python
# 多重赋值
a, b, c = 1, 2, 3
# 序列解包 (使用 * 收集剩余元素)
first, *rest, last = [1, 2, 3, 4, 5]
print(rest) # [2, 3, 4]
# 字典解包 (用于函数参数)
user = {"name": "李四", "age": 30}
def greet(name, age):
return f"{name} is {age} years old"
print(greet(**user))
5.3 生成器 (Generator)
生成器是惰性求值的迭代器,按需生成数据,适合处理大数据以节省内存。
- 生成器表达式: 使用圆括号
()而非方括号[],如squares_gen = (x**2 for x in range(1000000))。 - 生成器函数: 在函数中使用
yield关键字。
5.4 上下文管理器 (with 语句)
with 语句用于自动管理资源,确保在代码块结束时(无论是否发生异常)资源能够被正确清理,常用于文件操作。
Python
# 文件会自动关闭
with open("data.txt", "r", encoding="utf-8") as file:
content = file.read()
# ...
六、面向对象编程
Python 的面向对象是基于类的。
- 类定义: 使用
class关键字。 - 构造函数: 使用特殊方法
__init__(self, ...)。 - 实例方法: 所有实例方法(非静态方法)的第一个参数必须是
self,代表实例本身。 - 继承:
class Dog(Animal):
Python
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} makes a sound")
七、Python 最佳实践
7.1 Python 编程风格 (PEP 8)
遵循 Python 官方代码风格指南 PEP 8,使代码更具可读性。
- 命名: 变量、函数和方法使用
snake_case(如calculate_average)。 - 常量: 使用全大写(如
MAX_VALUE)。 - 代码块: 强制使用 4 个空格缩进。
7.2 常见陷阱
- 可变默认参数: 永远不要使用可变对象(如列表
[]或字典{})作为函数的默认参数,因为它们只会被创建一次并在函数调用间共享。
Python
# 正确做法
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
- 作用域: Python 没有块级作用域 (如
if块),但有函数作用域。
7.3 真值判断
Python 的真值判断规则相对直观:除了以下值被认为是 False 外,其他所有值都被视为 True。
FalseNone- 数字
0(包括整数、浮点数) - 空序列:
""(空字符串),[](空列表),()(空元组) - 空映射:
{}(空字典) - 空集合:
set()