装饰器(Decorators)是Python中一种强大的编程工具,它允许您在不修改被装饰函数源代码的情况下,增加、修改或扩展函数的功能。装饰器本质上是一个函数,它接受一个函数作为输入,并返回一个新的函数。装饰器在实际开发中常用于代码重用、日志记录、性能分析、权限检查等方面。
下面是一个装饰器的基本结构
Python
复制代码
def decorator_function(original_function):
def wrapper_function(*args, **kwargs):
# 添加装饰逻辑
result = original_function(*args, **kwargs)
# 返回被装饰函数的结果
return result
return wrapper_function
接下来我会举三个🌰🌰🌰来进一步带你们了解Python装饰器的用法,相信会对你们有所帮助👏👏👏(此处应该有掌声)
第一个🌰:
计时装饰器
这个装饰器可以用来计算函数的执行时间,比如在对一些函数做性能分析时,往往需要统计执行时间,有了装饰器我们就不需要写重复代码了,只需要给需要计算执行时间的方法加上装饰器即可。
Python
复制代码
# 这个装饰器可以用来计算函数的执行时间。
import time
# 这里是装饰器的定义
def timing_decorator(original_function):
def wrapper_function(*args, **kwargs):
start_time = time.time()
result = original_function(*args, **kwargs)
end_time = time.time()
print(f"函数{original_function.__name__}执行使用了{end_time - start_time}秒")
return result
return wrapper_function
# @后面跟着的方法就是我们定义的装饰器了
@timing_decorator
def slow_function():
time.sleep(2)
#这里调用了slow_function(),会输出方法所用时间
slow_function()
运行结果如下:
第二个🌰:
权限检验装饰器
这个装饰器可以用来检查用户是否有足够的权限执行某个操作。示例装饰器有1个入参,输入的是用户角色,比如只有角色是admin和root的才有对方法do_something()
有操作的权限。
Python
复制代码
# 这个装饰器可以用来检查用户是否有足够的权限执行某个操作。
def permission_required(permission):
def decorator(original_function):
def wrapper_function(*args, **kwargs):
if has_permission(permission):
return original_function(*args, **kwargs)
else:
# 装饰器内部使用了 raise 关键字来抛出异常,以便在特定条件下阻止函数继续执行。
raise PermissionError("没有操作权限")
return wrapper_function
return decorator
def has_permission(user_role):
user_roles = ['admin','root']
if user_role in user_roles:
return True
else:
return False
@permission_required("admin111")
def do_something(resource_id):
# 有权限操作
print(f"您有操作【{resource_id}】 的权限")
do_something('查看用户交易记录')
运行结果如下: 当@permission_required("admin111")
的入参是admin111时输出结果如下:
当@permission_required("admin")
的入参是admin时输出结果如下:
第三个🌰:
日志装饰器
这个装饰器可以用来记录函数的调用和参数。
Python
复制代码
# 这个装饰器可以用来记录函数的调用和参数。
def log_arguments(original_function):
def wrapper_function(*args, **kwargs):
print(f"调用了:{original_function.__name__}方法,传入的args为: {args}传入的kwargs为: {kwargs}")
result = original_function(*args, **kwargs)
return result
return wrapper_function
@log_arguments
def add(a, b):
return a + b
result = add(3, 5)
运行结果如下:
备注
raise
是Python中用于引发异常的关键字。当您在代码中使用 raise
关键字时,您实际上是在抛出一个异常,从而指示程序出现了错误或异常情况。
在上述示例中,装饰器内部使用了 raise
关键字来抛出异常,以便在特定条件下阻止函数继续执行。
这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!
CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
因篇幅有限,仅展示部分资料
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
5️⃣Python兼职渠道
而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓