以下是关于 Python 基础知识 中 字典(dict)、函数(function)、类(class) 的系统讲解,适合初学者快速掌握核心概念和常用用法。
我会尽量用清晰、结构化的方式讲解,并附上最常用的代码示例。
1. 字典(dict)
字典是 Python 中最常用的键值对数据结构,底层是哈希表,查找速度非常快。
核心特点
- 键(key)必须是不可变类型:字符串、数字、元组(列表、字典、集合不能做 key)
- 值(value)可以是任意类型
- 键不能重复,重复赋值会覆盖
- Python 3.7+ 字典保持插入顺序
基本操作
# 创建字典
d1 = {} # 空字典
d2 = dict() # 空字典
d3 = {"name": "小明", "age": 18, "city": "北京"}
# 访问与修改
print(d3["name"]) # 小明
d3["age"] = 19 # 修改
d3["score"] = 95 # 新增
# get 方法(推荐,避免 KeyError)
print(d3.get("height")) # None
print(d3.get("height", 170)) # 170(默认值)
# 删除
d3.pop("city") # 删除指定 key
d3.popitem() # 删除并返回最后一个键值对(3.7+ 有序)
del d3["age"] # 删除
# 常用方法
print(d3.keys()) # dict_keys(['name', 'score'])
print(d3.values()) # dict_values(['小明', 95])
print(d3.items()) # dict_items([('name', '小明'), ('score', 95)])
# 遍历
for k in d3:
print(k, d3[k])
for k, v in d3.items():
print(f"{k}: {v}")
字典推导式(非常常用)
# 快速创建字典
squares = {x: x**2 for x in range(1, 6)}
# {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
# 过滤
students = {"小明": 85, "小红": 92, "小刚": 60}
passed = {k: v for k, v in students.items() if v >= 60}
print(passed) # {'小明': 85, '小红': 92}
小技巧
setdefault():如果 key 不存在则设置默认值并返回update():批量更新字典
d = {}
d.setdefault("age", 18) # 如果没有 age,就设为 18 并返回 18
print(d) # {'age': 18}
2. 函数(function)
函数是代码复用、逻辑封装的核心。
定义与调用
# 基本定义
def greet(name="客人"): # 默认参数
print(f"你好,{name}!")
greet() # 你好,客人!
greet("小明") # 你好,小明!
参数类型(非常重要)
def func(a, b, c=10, *args, **kwargs):
print("a =", a) # 位置参数
print("b =", b) # 位置参数
print("c =", c) # 默认参数
print("args =", args) # 剩余位置参数 → 元组
print("kwargs =", kwargs) # 关键字参数 → 字典
func(1, 2) # a=1, b=2, c=10, args=(), kwargs={}
func(1, 2, 3, 4, 5, x=100, y=200)
# a=1, b=2, c=3, args=(4,5), kwargs={'x':100, 'y':200}
返回值
def get_info():
return 18, "小明", "北京" # 返回元组
age, name, city = get_info() # 解包
print(age, name, city) # 18 小明 北京
lambda 表达式(匿名函数)
# 普通写法
def add(x, y):
return x + y
# lambda 写法
add = lambda x, y: x + y
# 常用于排序
students = [("小明", 85), ("小红", 92), ("小刚", 70)]
students.sort(key=lambda x: x[1], reverse=True)
print(students) # [('小红', 92), ('小明', 85), ('小刚', 70)]
3. 类(class)—— 面向对象基础
Python 是完全面向对象的语言,一切皆对象。
基本定义与使用
class Person:
# 类属性(所有实例共享)
species = "人类"
# 初始化方法(构造器)
def __init__(self, name, age):
# 实例属性
self.name = name
self.age = age
self.__money = 10000 # 私有属性(名字改写:_Person__money)
# 实例方法
def say_hello(self):
print(f"大家好,我是{self.name},今年{self.age}岁")
# 类方法(操作类属性)
@classmethod
def get_species(cls):
return cls.species
# 静态方法(不依赖实例和类)
@staticmethod
def is_adult(age):
return age >= 18
# 使用
p1 = Person("小明", 20)
p1.say_hello() # 大家好,我是小明,今年20岁
print(Person.get_species()) # 人类
print(Person.is_adult(16)) # False
私有属性与封装
print(p1._Person__money) # 10000(可以访问,但不推荐)
# p1.__money # AttributeError
继承与多态
class Student(Person):
def __init__(self, name, age, school):
super().__init__(name, age) # 调用父类构造方法
self.school = school
# 方法重写(多态)
def say_hello(self):
print(f"大家好,我是{self.school}的学生{self.name},今年{self.age}岁")
s1 = Student("小红", 18, "北大")
s1.say_hello()
# 大家好,我是北大的学生小红,今年18岁
常用魔法方法(dunder methods)
class Book:
def __init__(self, title, price):
self.title = title
self.price = price
def __str__(self): # print() 时调用
return f"{self.title} - ¥{self.price}"
def __len__(self): # len() 时调用
return len(self.title)
def __add__(self, other): # + 运算符
return self.price + other.price
b1 = Book("Python入门", 59)
b2 = Book("Java高级", 89)
print(b1) # Python入门 - ¥59
print(len(b1)) # 8
print(b1 + b2) # 148
快速对比总结表
| 内容 | 字典 (dict) | 函数 | 类 (class) |
|---|---|---|---|
| 核心作用 | 存储键值对 | 封装可复用逻辑 | 封装数据 + 行为 |
| 创建方式 | {} / dict() | def / lambda | class |
| 访问方式 | d[key] / get() | func() | obj.attr / obj.method() |
| 常用场景 | 配置、计数、映射 | 工具函数、算法、处理逻辑 | 建模实体、面向对象设计 |
| 高级用法 | 推导式、setdefault | *args, **kwargs | 继承、多态、魔法方法 |
练习小建议(快速上手)
- 用字典实现一个简单的单词计数器
- 写一个函数,接受任意参数,返回它们的类型和值
- 定义一个
Car类,包含品牌、速度、油量,支持加速、加油、鸣笛等方法
如果你想针对上面任意一部分深入(例如字典的高级用法、闭包、装饰器、类的多继承、属性装饰器等),可以告诉我,我继续展开讲解。
祝你 Python 学习顺利!