1. 生成器与迭代器
核心:二者均用于遍历,迭代器需实现__iter__和__next__方法;生成器用yield定义,惰性计算省内存,可通过send()控制逻辑,适用于大数据、大文件场景。
# 生成器示例
defdata_generator():
foriinrange(1000000):
yieldi# 惰性生成
gen=data_generator()
print(next(gen)) # 逐次取值
2. 装饰器
核心:装饰器是高阶函数嵌套,不修改原函数即可添加功能(日志、计时等),依赖闭包,@语法简化调用,是后端开发核心技术。
# 装饰器示例
importtime
deftimer(func):
defwrapper(*args, **kwargs):
start=time.time()
res=func(*args, **kwargs)
print(f"耗时:{time.time()-start:.4f}秒")
returnres
returnwrapper
3. 上下文管理器
核心:自动管理资源(文件、数据库等),避免泄露。可调用内置(with open())或自定义(实现__enter__、__exit__方法)。
# 上下文管理器示例(内置)
withopen("test.txt", "r") asf:
print(f.read()) # 自动关闭文件,无需手动close()
4. 闭包
核心:闭包是装饰器底层,内层函数引用外层变量且被返回,可保留变量状态、实现数据隔离,注意避免引用可变变量的问题。
# 闭包示例
defouter(count):
definner():
nonlocalcount
count+=1
returncount
returninner
counter=outer(0)
print(counter()) # 1
5. 魔法方法
核心:双下划线特殊方法(如__init__、__str__),自动触发,用于自定义类行为,简化代码,是面向对象核心拓展。
# 魔法方法示例
classStudent:
def__init__(self, name):
self.name=name
def__str__(self):
returnf"Student({self.name})"
print(Student("小明")) # 触发__str__,输出Student(小明)
6. 列表推导式与字典推导式
核心:简洁语法糖,快速创建列表/字典,替代for循环,效率高,可结合条件筛选,避免嵌套过深影响可读性。
# 推导式示例
list1= [iforiinrange(5) ifi%2==0] # 列表推导式:[0,2,4]
dict1= {i:i*2foriinrange(3)} # 字典推导式:{0:0,1:2,2:4}
7. 模块化与包
核心:模块化拆分代码到.py文件,包是模块集合(含__init__.py),实现代码复用、降低耦合,通过import导入,适配工程化开发。
# 模块化示例(假设test.py为模块)
importtest# 导入模块
fromtestimportfunc# 导入模块中的函数
8. 异常处理进阶
核心:除基础try-except,支持捕获多异常、自定义异常,可通过raise主动抛异常,提升程序容错性,便于问题定位。
# 异常处理示例
classMyError(Exception): # 自定义异常
pass
try:
num=int(input("输入数字:"))
ifnum<0:
raiseMyError("数字不能为负")
exceptValueError:
print("请输入有效数字")
exceptMyErrorase:
print(e)
9. 深浅拷贝
核心:用于复制对象,浅拷贝仅复制表层数据,深拷贝递归复制所有层级数据,避免修改副本影响原对象,常用copy模块实现。
# 深浅拷贝示例
import copy
a = [1, [2, 3]]
b = copy.copy(a) # 浅拷贝
c = copy.deepcopy(a)# 深拷贝
a[1].append(4)
print(b) # [1, [2, 3, 4]](受原对象影响)
print(c) # [1, [2, 3]](不受影响)
10. 函数式编程
核心:基于不可变数据,依赖纯函数(无副作用),常用map、filter、reduce函数,简化逻辑,提升代码可读性与可维护性。
# 函数式编程示例
from functools import reduce
# map映射、filter筛选、reduce聚合
nums = [1,2,3,4]
print(list(map(lambda x: x*2, nums))) # [2,4,6,8]
print(list(filter(lambda x: x%2==0, nums))) # [2,4]
print(reduce(lambda x,y: x+y, nums)) # 10