1. 生成器表达式与内存优化
import sys
# 使用生成器表达式计算一个大列表的平方和,避免了创建完整的列表,从而节省内存
squares_sum = sum(x*x for x in range(10**6))
print(f"内存使用: {sys.getsizeof(squares_sum)} 字节")
说明: 生成器表达式可以在迭代中逐个生成结果,而不是一次性创建整个列表,减少内存占用。
2. 装饰器模式
def my_decorator(func):
def wrapper(*args, **kwargs):
print("开始执行函数")
result = func(*args, **kwargs)
print("函数执行结束")
return result
return wrapper
@my_decorator
def say_hello(name):
return f"Hello, {name}"
print(say_hello("Alice"))
说明: 装饰器允许在函数执行前后添加行为而不修改原始函数的代码,是一种面向切面编程的实现方式。
3. 上下文管理器
class FileManager:
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
self.file = open(self.filename, self.mode)
return self.file
def __exit__(self, exc_type, exc_val, exc_tb):
self.file.close()
with FileManager('example.txt', 'w') as f:
f.write('Hello, world!')
说明: 自定义上下文管理器用于确保文件在打开后能正确关闭,避免资源泄露。
4. 元类编程
class Meta(type):
def __new__(cls, name, bases, dct):
print(f"Creating class {name}")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
pass
说明: 元类控制类的创建过程,可以在类创建时动态修改类的行为。
5. 多线程
import threading
def print_numbers():
for i in range(5):
print(i)
thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
说明: 多线程可以在不阻塞主线程的情况下执行并行任务,适用于I/O密集型任务。
6. 协程与异步IO
import asyncio
async def main():
print('Hello')
await asyncio.sleep(1)
print('World')
asyncio.run(main())
说明: 使用asyncio
库来处理异步I/O操作,协程通过await
挂起执行,直到结果准备好,从而高效利用资源。
7. 函数内存缓存
from functools import lru_cache
@lru_cache(maxsize=32)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(10))
说明: 使用lru_cache
装饰器为递归函数提供缓存机制,从而大幅提升性能。
8. 上下文表达式
with open('example.txt', 'w') as f, open('log.txt', 'w') as log:
f.write('Hello, world!')
log.write('File has been written')
说明: 多个上下文管理器可以使用逗号分隔在一个with
语句中使用,简化代码结构。
9. 生成器函数
def countdown(n):
print("Starting countdown")
while n > 0:
yield n
n -= 1
for i in countdown(5):
print(i)
说明: 生成器函数通过yield
提供一种延迟生成值的方式,适用于处理大数据或无限序列。
10. 链式函数调用
class Calculator:
def __init__(self, value=0):
self.value = value
def add(self, x):
self.value += x
return self
def subtract(self, x):
self.value -= x
return self
result = Calculator().add(5).subtract(3).value
print(result)
说明: 链式调用允许在同一个对象上连续调用多个方法,简化代码结构并提高可读性。