- Python 学习路径:从零到精通
- Python 环境搭建
- Python 基础语法
- Python 数据结构
- Python 字符串操作
- Python 文件读写
- Python 函数进阶
- Python 面向对象编程(OOP)
- Python 异常处理
- Python 模块与包
- Python 迭代器与生成器
- Python 装饰器
- Flask 基础与入门
- Django 框架基础
- Python RESTful API 开发
- Python Web 表单与用户认证
- Python 数据的操作
- SQLAlchemy ORM 的使用
- Pandas 数据分析基础
- Numpy 数值计算
- 数据可视化(Matplotlib, Seaborn)
- 数据导入导出(CSV, Excel, JSON)
- 使用 requests 库进行 HTTP 请求
- 使用 BeautifulSoup 或 Scrapy 进行网页解析
- 线程与进程的概念
- 使用 threading 模块实现多线程
- 使用 multiprocessing 模块实现多进程
- GIL(全局解释器锁)的概念与影响
- Python 自动化脚本
- Python 常用设计模式
- Python 性能分析工具
- Python 内存管理与优化
- 并行与异步编程(asyncio, concurrent.futures)
- 测试驱动开发(TDD)
- WebSocket 实时通信
- Python GraphQL API 开发
- 前后端分离与前端框架(Vue.js, React)的集成
- 使用 Docker 容器化部署 Python 应用
- CI/CD 流程的自动化(GitHub Actions, Jenkins)
- Scikit-learn, TensorFlow 或 PyTorch 的基础知识
- 数据预处理与特征工程
- 构建与训练模型
- 模型评估与调优
- Hadoop 与 Spark 基础
- 使用 PySpark 进行大数据处理
- 分布式计算与数据流处理
- 基本的加密与解密技术
- 简单的网络安全工具(如端口扫描、漏洞检测)
- Web 安全与常见攻击防御(如 SQL 注入、XSS)
- 项目的协作流程
- 撰写高质量的代码与文档
Python 装饰器
class PythonPython 装饰器
1. 装饰器的定义与使用
装饰器 是 Python 中的一种高级特性,用于在不改变函数内部代码的前提下,增强或修改函数的行为。装饰器实际上是一个高阶函数,它接受一个函数作为参数,并返回一个增强或修改后的函数。
装饰器的定义
要定义一个装饰器,可以创建一个函数,该函数接受另一个函数作为参数,并返回一个新的函数。
def my_decorator(func):
def wrapper():
print("Before the function runs")
func()
print("After the function runs")
return wrapper
装饰器的使用
你可以通过 @decorator_name
语法糖来应用装饰器。
@my_decorator
def say_hello():
print("Hello!")
say_hello()
上述代码输出:
Before the function runs
Hello!
After the function runs
注意:@my_decorator
等效于 say_hello = my_decorator(say_hello)
。
带参数的装饰器
如果需要装饰器处理带参数的函数,可以在 wrapper
函数中使用 *args
和 **kwargs
来捕获所有位置参数和关键字参数。
def my_decorator(func):
def wrapper(*args, **kwargs):
print(f"Arguments passed to the function: {args} {kwargs}")
return func(*args, **kwargs)
return wrapper
@my_decorator
def add(a, b):
return a + b
result = add(3, 4)
print(f"Result: {result}")
上述代码输出:
Arguments passed to the function: (3, 4) {}
Result: 7
2. 装饰器的应用场景
装饰器可以在很多场景下使用,如下是一些常见的应用场景:
- 日志记录:自动记录函数的调用信息。
- 权限校验:在函数执行前验证用户权限。
- 性能分析:计算函数执行时间。
- 缓存:缓存函数的计算结果以提高性能。
3. 基于命令行的任务管理工具
接下来我们将创建一个基于命令行的任务管理工具,该工具使用装饰器来增强某些功能,并实现任务的增删查功能,并支持导入导出任务列表。
任务管理工具代码示例
import json
import os
# 装饰器:日志记录
def log_action(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
print(f"Action: {func.__name__} | Args: {args} | Result: {result}")
return result
return wrapper
class TaskManager:
def __init__(self):
self.tasks = []
@log_action
def add_task(self, task):
self.tasks.append(task)
return f"Task '{task}' added."
@log_action
def delete_task(self, task):
if task in self.tasks:
self.tasks.remove(task)
return f"Task '{task}' deleted."
return f"Task '{task}' not found."
@log_action
def list_tasks(self):
return self.tasks
@log_action
def export_tasks(self, filename):
with open(filename, 'w') as file:
json.dump(self.tasks, file)
return f"Tasks exported to '{filename}'."
@log_action
def import_tasks(self, filename):
if os.path.exists(filename):
with open(filename, 'r') as file:
self.tasks = json.load(file)
return f"Tasks imported from '{filename}'."
return f"File '{filename}' not found."
def main():
manager = TaskManager()
while True:
print("\nTask Manager")
print("1. Add task")
print("2. Delete task")
print("3. List tasks")
print("4. Export tasks")
print("5. Import tasks")
print("6. Exit")
choice = input("Choose an option: ")
if choice == "1":
task = input("Enter task: ")
print(manager.add_task(task))
elif choice == "2":
task = input("Enter task to delete: ")
print(manager.delete_task(task))
elif choice == "3":
print("Tasks:", manager.list_tasks())
elif choice == "4":
filename = input("Enter filename to export: ")
print(manager.export_tasks(filename))
elif choice == "5":
filename = input("Enter filename to import: ")
print(manager.import_tasks(filename))
elif choice == "6":
print("Goodbye!")
break
else:
print("Invalid choice. Please try again.")
if __name__ == "__main__":
main()
工具功能说明
- 任务管理:可以添加、删除、列出任务。
- 导入导出:可以将任务列表导出到文件,也可以从文件导入任务列表。
- 日志记录:使用装饰器记录每次操作的日志,包括操作名称和参数。
运行方式
将上述代码保存为 task_manager.py
,在命令行执行以下命令运行:
python task_manager.py
总结
- 装饰器 是用于增强或修改函数行为的高效工具,适用于日志记录、权限校验等场景。
- 通过创建一个基于命令行的任务管理工具,你可以应用 Python 的装饰器特性来增强功能,同时实现任务的增删查导入导出功能。
评论区
评论列表
{{ item.user.nickname || item.user.username }}