3分钟带你了解Python装饰器(Decorators)离成为大佬又近了一步

装饰器(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()

运行结果如下:

image.png

第二个🌰:

权限检验装饰器

这个装饰器可以用来检查用户是否有足够的权限执行某个操作。示例装饰器有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时输出结果如下:

image.png

@permission_required("admin")的入参是admin时输出结果如下:

image.png

第三个🌰:

日志装饰器

这个装饰器可以用来记录函数的调用和参数。

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)

运行结果如下:

image.png


备注

raise 是Python中用于引发异常的关键字。当您在代码中使用 raise 关键字时,您实际上是在抛出一个异常,从而指示程序出现了错误或异常情况。

在上述示例中,装饰器内部使用了 raise 关键字来抛出异常,以便在特定条件下阻止函数继续执行。

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助!

CSDN大礼包:全网最全《全套Python学习资料》免费分享🎁

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

5️⃣Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
上述所有资料 ⚡️ ,朋友们如果有需要 📦《全套Python学习资料》的,可以扫描下方二维码免费领取 🆓
😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击)👈

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python decorators是一种用于修改或增强函数功能的语法结构。它们允许开发者在不修改原始函数代码的情况下,通过在函数定义之前使用特殊符号(@)和装饰器函数来对函数进行包装或修饰。装饰器函数接受被装饰函数作为参数,并可以在原始函数执行之前或之后添加额外的逻辑或功能。这种技术可以用来实现缓存、日志记录、身份验证等功能。 Python decorators的使用方法可以根据具体需求进行定义和实现。常见的方法包括使用装饰器函数、使用类作为装饰器、使用参数的装饰器等。装饰器函数是最常见的一种方式,它接受一个函数作为参数并返回一个新的函数,新函数会替换原始函数。这样,在调用原始函数时,实际上是调用了被装饰的函数,从而在不修改原始函数的情况下添加了额外的功能。 除了使用Python内置的装饰器语法,还可以使用第三方库来简化装饰器的编写和使用。例如,可以使用decorator模块来定义和使用装饰器。这个模块提供了一种更简洁的语法,可以直接在函数定义之前使用@decorator语法来应用装饰器。该模块的使用方法如下所示: ```python from decorator import decorator @decorator def hint(func, *args, **kwargs): print('{} is running'.format(func.__name__)) return func(*args, **kwargs) ``` 上述代码定义了一个名为hint的装饰器函数,它接受一个函数作为参数,并在函数执行之前打印出函数名。然后,通过在函数定义之前使用@hint语法,将装饰器应用到目标函数上。这样,在调用目标函数时,实际上会先执行装饰器函数内部的逻辑,然后再执行目标函数本身的逻辑。 总结来说,Python decorators是一种用于修饰函数的语法结构,可以通过装饰器函数在不修改原始函数代码的情况下增强函数功能。它可以通过Python内置的装饰器语法或第三方库来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python Decorator](https://blog.csdn.net/weixin_30951231/article/details/96490117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python系列之装饰器(decorator)](https://blog.csdn.net/ikxyang/article/details/121995824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值