Python 高级主题与性能优化指南
标题:Python 高级主题与性能优化指南
https://www.python.org/static/community_logos/python-powered-h-140x182.png
并发与并行编程
多线程编程
python
复制
下载
import threading import timedef print_numbers():for i in range(5):time.sleep(1)print(f"Number: {i}")def print_letters():for letter in 'ABCDE':time.sleep(1.5)print(f"Letter: {letter}")# 创建线程 t1 = threading.Thread(target=print_numbers) t2 = threading.Thread(target=print_letters)# 启动线程 t1.start() t2.start()# 等待线程完成 t1.join() t2.join()print("所有线程执行完毕!")
https://www.pythontutorial.net/wp-content/uploads/2020/07/Python-threads.png
多进程编程
python
复制
下载
from multiprocessing import Process import osdef square_numbers():for i in range(5):print(f"Process {os.getpid()} 计算: {i*i}")processes = [] for _ in range(3):p = Process(target=square_numbers)processes.append(p)p.start()for p in processes:p.join()
异步编程 (asyncio)
python
复制
下载
import asyncioasync def fetch_data():print("开始获取数据")await asyncio.sleep(2) # 模拟IO操作print("数据获取完成")return {"data": 123}async def main():task1 = asyncio.create_task(fetch_data())task2 = asyncio.create_task(fetch_data())data1 = await task1data2 = await task2print(f"结果1: {data1}, 结果2: {data2}")asyncio.run(main())
性能优化技巧
使用生成器节省内存
python
复制
下载
# 普通列表 def firstn_list(n):num, nums = 0, []while num < n:nums.append(num)num += 1return nums# 生成器版本 def firstn_gen(n):num = 0while num < n:yield numnum += 1# 比较内存使用 import sys print(sys.getsizeof(firstn_list(1000000))) # 输出: 8448728 (约8.4MB) print(sys.getsizeof(firstn_gen(1000000))) # 输出: 120 (仅120字节)
使用NumPy进行高效数值计算
python
复制
下载
import numpy as np import time# Python原生列表 start = time.time() py_list = [i**2 for i in range(1000000)] end = time.time() print(f"Python列表耗时: {end-start:.4f}秒")# NumPy数组 start = time.time() np_array = np.arange(1000000)**2 end = time.time() print(f"NumPy数组耗时: {end-start:.4f}秒")
https://numpy.org/doc/stable/_images/speed_comparison.png
元编程与装饰器
自定义装饰器
python
复制
下载
def timer(func):import timedef wrapper(*args, **kwargs):start = time.time()result = func(*args, **kwargs)end = time.time()print(f"{func.__name__} 执行耗时: {end-start:.4f}秒")return resultreturn wrapper@timer def long_running_function(n):total = 0for i in range(n):total += ireturn totalresult = long_running_function(1000000) print(f"计算结果: {result}")
类装饰器与元类
python
复制
下载
# 类装饰器 def add_method(cls):def decorator(func):setattr(cls, func.__name__, func)return funcreturn decoratorclass MyClass:pass@add_method(MyClass) def new_method(self, value):return value * 2obj = MyClass() print(obj.new_method(5)) # 输出: 10# 元类示例 class Meta(type):def __new__(cls, name, bases, namespace):namespace['version'] = '1.0'return super().__new__(cls, name, bases, namespace)class MyBase(metaclass=Meta):passprint(MyBase.version) # 输出: 1.0
C扩展与性能关键代码
使用Cython加速Python代码
fib.pyx
文件内容:
cython
复制
下载
def fib(n):a, b = 0, 1for _ in range(n):a, b = b, a + breturn a
编译步骤:
-
创建
setup.py
:
python
复制
下载
from setuptools import setup from Cython.Build import cythonizesetup(ext_modules=cythonize("fib.pyx"))
-
运行编译:
bash
复制
下载
python setup.py build_ext --inplace
-
使用编译后的模块:
python
复制
下载
import fib print(fib.fib(100))
使用cFFI调用C代码
example.c
:
c
复制
下载
#include <stdio.h>int add(int a, int b) {return a + b; }
Python调用:
python
复制
下载
from cffi import FFIffi = FFI() ffi.cdef("int add(int a, int b);")C = ffi.dlopen("./example.so") # 需要先编译C代码 print(C.add(3, 5)) # 输出: 8
设计模式在Python中的实现
单例模式
python
复制
下载
class Singleton:_instance = Nonedef __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)return cls._instanceobj1 = Singleton() obj2 = Singleton() print(obj1 is obj2) # 输出: True
观察者模式
python
复制
下载
class Subject:def __init__(self):self._observers = []def attach(self, observer):self._observers.append(observer)def notify(self, message):for observer in self._observers:observer.update(message)class Observer:def update(self, message):print(f"收到消息: {message}")subject = Subject() observer1 = Observer() observer2 = Observer()subject.attach(observer1) subject.attach(observer2) subject.notify("状态已更新!")
https://refactoring.guru/images/patterns/diagrams/observer/structure.png
安全编程实践
安全密码处理
python
复制
下载
from passlib.hash import pbkdf2_sha256 import getpass# 密码哈希 password = getpass.getpass("输入密码: ") hashed = pbkdf2_sha256.hash(password) print(f"哈希后的密码: {hashed}")# 验证密码 verify_pass = getpass.getpass("验证密码: ") if pbkdf2_sha256.verify(verify_pass, hashed):print("密码匹配!") else:print("密码不匹配!")
输入验证与清理
python
复制
下载
import html from bleach import clean# 用户输入 user_input = '<script>alert("XSS")</script> 正常文本'# HTML转义 safe_text = html.escape(user_input) print(f"转义后: {safe_text}")# 使用bleach清理 cleaned = clean(user_input, tags=[], attributes={}, styles=[], strip=True) print(f"清理后: {cleaned}")
调试与性能分析
高级调试技巧
python
复制
下载
import pdbdef buggy_function(x):result = []for i in range(x):# 设置条件断点if i == 5:pdb.set_trace()result.append(i * 2)return result# 调试命令示例: # n(ext) - 执行下一行 # c(ontinue) - 继续执行直到下一个断点 # p(rint) - 打印变量值 # l(ist) - 显示当前代码位置 # q(uit) - 退出调试
性能分析工具
python
复制
下载
import cProfile import redef test():for _ in range(10000):re.compile("foo|bar")# 运行性能分析 profiler = cProfile.Profile() profiler.enable() test() profiler.disable() profiler.print_stats(sort='cumtime')
https://docs.python.org/3/library/profile.png
Python与其他语言交互
调用系统命令
python
复制
下载
import subprocess# 运行系统命令 result = subprocess.run(['ls', '-l'], capture_output=True, text=True) print(result.stdout)# 检查返回码 if result.returncode == 0:print("命令执行成功!") else:print(f"命令失败: {result.stderr}")
使用PyJNIus调用Java代码
python
复制
下载
from jnius import autoclass# 调用Java类 System = autoclass('java.lang.System') print(System.getProperty('java.version'))# 创建Java对象 ArrayList = autoclass('java.util.ArrayList') alist = ArrayList() alist.add("Python") alist.add("Java") print(alist.size()) # 输出: 2
现代Python特性
类型提示与静态检查
python
复制
下载
from typing import List, Dict, Optionaldef process_data(data: List[int], config: Optional[Dict[str, str]] = None) -> float:"""处理数据并返回平均值"""if not data:raise ValueError("数据不能为空")total = sum(data)avg = total / len(data)if config and 'scale' in config:avg *= float(config['scale'])return avg# 使用mypy进行静态类型检查 # pip install mypy # mypy your_script.py
数据类 (dataclass)
python
复制
下载
from dataclasses import dataclass@dataclass class Point:x: floaty: floatz: float = 0.0 # 默认值def distance(self) -> float:return (self.x**2 + self.y**2 + self.z**2)**0.5p = Point(3.0, 4.0) print(p) # 输出: Point(x=3.0, y=4.0, z=0.0) print(f"距离: {p.distance()}") # 输出: 5.0
结语与进阶路线
https://miro.medium.com/max/1400/1*HLGtY3O-RxHbcuZP9zu6Ew.png
通过这五篇系列教程,你已经掌握了Python从基础到高级的完整知识体系。接下来可以:
-
深入特定领域:
-
Web开发:Django/Flask高级特性
-
数据分析:Pandas高级操作
-
机器学习:Scikit-learn/TensorFlow/PyTorch
-
-
参与开源项目:
-
在GitHub上贡献Python项目
-
解决开源项目中的issue
-
-
性能优化:
-
学习使用PyPy等替代实现
-
掌握更高级的并行计算技术
-
-
架构设计:
-
学习大型Python项目架构
-
掌握微服务设计模式
-
记住,成为Python专家需要持续的实践和学习。保持编码,不断挑战更复杂的项目!