🐍 Python 核心知识点:从零开始快速构建 Python 知识体系

0 阅读9分钟

这篇文章将会系统地提炼 Python 的核心知识点、语法特性和编程风格,帮助你高效地建立完整的 Python 知识体系。

一、基础语法

1.1 变量与赋值

Python 不需要专门的关键字来声明变量,直接赋值即可。

  • 赋值: name = "张三"
  • 命名规范: 推荐使用 snake_case(下划线命名),如 is_student
  • 空值: 使用 None 表示空值。
  • 布尔值: 只有 TrueFalse,首字母必须大写。
name = "张三"
age = 25
is_student = True
score = None

1.2 函数定义

使用 def 关键字定义函数,函数体通过 缩进 来界定。

  • 定义: 使用 def 关键字,后跟函数名和参数列表,以冒号 : 结束。
  • 函数体: 必须缩进。
  • 默认参数: 可以在参数列表中设置默认值,如 age=18
  • lambda 表达式: 用于创建简单的单行匿名函数。
  • f-string: 用于字符串格式化(类似模板字符串)。
# 普通函数 
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 条件语句

使用 ifelif(而不是 else if)和 else。代码块由冒号 :缩进 确定。

  • 三元表达式: 语法为 value_if_true if condition else value_if_false
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() 函数同时获取索引和值。
# 迭代数字 (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 += 1i -= 1
i = 0
while i < 5:
    print(i)
    i += 1

二、数据类型

Python 是强类型语言,明确区分不同的数据类型。

2.1 基本数据类型

类型Python 名称说明
字符串str单引号 ' 和双引号 " 完全等价。
整数int支持任意大小的整数。
浮点数float标准浮点数。
布尔值boolTrueFalse
空值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}!"
  • 多行字符串: 使用三引号 """..."""'''...''' 创建。
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):转换为布尔值。
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 表示倒数第二个元素。
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

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

print(arr[2:5])   # [2, 3, 4]  (从索引 25, 不含 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]
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)
  • 解包: 元组支持解包,常用于函数返回多个值和变量交换。
# 创建元组
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
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() 方法。

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}
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 | set2set1.union(set2)
    • 交集: set1 & set2set1.intersection(set2)
    • 差集: set1 - set2

5.2 多重赋值与解包

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 语句用于自动管理资源,确保在代码块结束时(无论是否发生异常)资源能够被正确清理,常用于文件操作。

# 文件会自动关闭
with open("data.txt", "r", encoding="utf-8") as file:
    content = file.read()
    # ...

六、面向对象编程

Python 的面向对象是基于类的。

  • 类定义: 使用 class 关键字。
  • 构造函数: 使用特殊方法 __init__(self, ...)
  • 实例方法: 所有实例方法(非静态方法)的第一个参数必须是 self,代表实例本身。
  • 继承: class Dog(Animal):
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 常见陷阱

  • 可变默认参数: 永远不要使用可变对象(如列表 [] 或字典 {})作为函数的默认参数,因为它们只会被创建一次并在函数调用间共享。
# 正确做法
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items
  • 作用域: Python 没有块级作用域(如 if 块),但有函数作用域

7.3 真值判断

Python 的真值判断规则相对直观:除了以下值被认为是 False 外,其他所有值都被视为 True

  • False
  • None
  • 数字 0(包括整数、浮点数)
  • 空序列:""(空字符串),[](空列表),()(空元组)
  • 空映射:{}(空字典)
  • 空集合:set()