标题:Python 高级主题与性能优化指南
https://www.python.org/static/community_logos/python-powered-h-140x182.png
并发与并行编程
多线程编程
python
复制
下载
import threading
import time
def 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 os
def 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 asyncio
async 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 task1
data2 = await task2
print(f"结果1: {data1}, 结果2: {data2}")
asyncio.run(main())
性能优化技巧
使用生成器节省内存
python
复制
下载
# 普通列表
def firstn_list(n):
num, nums = 0, []
while num < n:
nums.append(num)
num += 1
return nums
# 生成器版本
def firstn_gen(n):
num = 0
while num < n:
yield num
num += 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 time
def wrapper(*args, **kwargs):
start = time.time()
result = func(*args, **kwargs)
end = time.time()
print(f"{func.__name__} 执行耗时: {end-start:.4f}秒")
return result
return wrapper
@timer
def long_running_function(n):
total = 0
for i in range(n):
total += i
return total
result = long_running_function(1000000)
print(f"计算结果: {result}")
类装饰器与元类
python
复制
下载
# 类装饰器
def add_method(cls):
def decorator(func):
setattr(cls, func.__name__, func)
return func
return decorator
class MyClass:
pass
@add_method(MyClass)
def new_method(self, value):
return value * 2
obj = 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):
pass
print(MyBase.version) # 输出: 1.0
C扩展与性能关键代码
使用Cython加速Python代码
fib.pyx 文件内容:
cython
复制
下载
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
return a
编译步骤:
-
创建
setup.py:
python
复制
下载
from setuptools import setup
from Cython.Build import cythonize
setup(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 FFI
ffi = 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 = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
obj1 = 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 pdb
def 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 re
def 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, Optional
def 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: float
y: float
z: float = 0.0 # 默认值
def distance(self) -> float:
return (self.x**2 + self.y**2 + self.z**2)**0.5
p = 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专家需要持续的实践和学习。保持编码,不断挑战更复杂的项目!
1919

被折叠的 条评论
为什么被折叠?



