当前位置: 首页 > news >正文

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

编译步骤:

  1. 创建 setup.py:

python

复制

下载

from setuptools import setup
from Cython.Build import cythonizesetup(ext_modules=cythonize("fib.pyx"))
  1. 运行编译:

bash

复制

下载

python setup.py build_ext --inplace
  1. 使用编译后的模块:

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从基础到高级的完整知识体系。接下来可以:

  1. 深入特定领域

    • Web开发:Django/Flask高级特性

    • 数据分析:Pandas高级操作

    • 机器学习:Scikit-learn/TensorFlow/PyTorch

  2. 参与开源项目

    • 在GitHub上贡献Python项目

    • 解决开源项目中的issue

  3. 性能优化

    • 学习使用PyPy等替代实现

    • 掌握更高级的并行计算技术

  4. 架构设计

    • 学习大型Python项目架构

    • 掌握微服务设计模式

记住,成为Python专家需要持续的实践和学习。保持编码,不断挑战更复杂的项目!

相关文章:

  • 体系结构论文(八十六):The Dark Side ofComputing: SilentData Corruptions
  • C++ —— STL容器 —— string的模拟实现
  • 北京大学:AI+Agent与Agentic+AI的原理与应用(适合科研从业者和技术爱好者阅读)
  • 功能测试—软件的生命周期
  • 单 exe 截图软件:ScreenCapture 2.3.1 发布
  • 包含各种扁平化UI套件的psd适用于博客电商类移动端网站项目
  • 搭建前端项目 Vue+element UI引入 步骤 (超详细)
  • Linux 系统设置时区
  • Flask应用中处理异步事件(后台线程+事件循环)的方法(2)
  • 一个完整的LSTM风光发电预测与并网优化方案,包含数据处理、模型构建、训练优化、预测应用及系统集成实现细节
  • 2025软件测试面试题汇总(接口测试篇)
  • Kubernetes安全机制深度解析(四):动态准入控制和Webhook
  • 成都鼎讯短波通信信号模拟设备:短波频段的电磁模拟王者​
  • visual studio2019+vcpkg管理第三方库
  • 谷歌具身智能VLA大模型 —— Gemini Robotics : 将人工智能带入到物理世界
  • CLONE——面向长时任务的闭环全身遥操:其MoE架构可实现“蹲着走”,且通过LiDAR里程计和VR跟踪技术解决位置偏差问题
  • 数字孪生之KTV洗脚城白皮书:娱乐产业的虚实融合革命
  • Day01_C数据结构
  • 2025虚幻人物模型积累
  • 手阳明大肠经之下廉穴
  • 网站建设评估报告/网站搭建源码
  • 2015做那些网站致富/免费搭建个人网站
  • 江山做网站/百度网站官网入口网址
  • 做会员卡的网站在线/营销网络图
  • wordpress所有分类/四川seo快速排名
  • 怎样做网站的优化/搜索引擎优化培训班