一、装饰器入门:给函数加buff不改动源码
概念:
不修改函数代码,为函数添加额外功能(如计时、日志)的工具。
语法:
def 装饰器名(func):
def 内层函数(*args, **kwargs):
# 额外功能代码
result = func(*args, **kwargs)
return result
return 内层函数
代码示例:
def timer(func):
import time
def wrapper(*args):
start = time.time()
res = func(*args)
print(f"函数耗时:{time.time()-start:.2f}s")
return res
return wrapper
@timer # 给函数加装饰器
def add(a, b):
return a + b
add(100, 200) # 输出:函数耗时:0.00s
二、生成器:省内存的迭代神器
概念:
动态生成数据,迭代时才产生元素,不占用大量内存。
语法:
- 生成器表达式: (表达式 for 变量 in 可迭代对象)
- 生成器函数:用 yield 返回元素
代码示例:
# 生成器表达式
gen = (x*3 for x in range(5))
for num in gen:
print(num) # 输出:0 3 6 9 12
# 生成器函数
def fib(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a+b
for val in fib(5):
print(val) # 输出:0 1 1 2 3
三、匿名函数lambda:一行搞定简单逻辑
概念:
无函数名的临时函数,仅能写简单表达式,适合临时使用。
语法:
lambda 参数: 表达式 (返回表达式结果)
代码示例:
# 单独使用
add = lambda x, y: x + y
print(add(3, 5)) # 输出:8
# 结合sorted使用
lst = [(1,3), (2,1), (3,2)]
# 按元组第二个元素排序
sorted_lst = sorted(lst, key=lambda x: x[1])
print(sorted_lst) # 输出:[(2,1), (3,2), (1,3)]
四、with语句:自动管理资源不翻车
概念:
自动完成资源的打开与关闭(如文件、网络连接),避免资源泄露。
语法:
with 资源对象 as 别名: 操作代码
代码示例:
# 常规文件操作(需手动关闭)
f = open("test.txt", "w")
f.write("hello")
f.close()
# with语句操作(自动关闭)
with open("test.txt", "w") as f:
f.write("python")
# 读取文件验证
with open("test.txt", "r") as f:
print(f.read()) # 输出:python