【从零学习python 】33.装饰器的作用(二)

简介: 【从零学习python 】33.装饰器的作用(二)

再议装饰器

# 定义函数:完成包裹数据
def makeBold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped
# 定义函数:完成包裹数据
def makeItalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped
@makeBold
def test1():
    return "hello world-1"
@makeItalic
def test2():
    return "hello world-2"
@makeBold
@makeItalic
def test3():
    return "hello world-3"
print(test1())
print(test2())
print(test3())

运行结果:

hello world-1

hello world-2

hello world-3

4. 装饰器(decorator)功能

  • 引入日志
  • 函数执行时间统计
  • 执行函数前预备处理
  • 执行函数后清理功能
  • 权限校验等场景
  • 缓存

5. 装饰器示例

例1:无参数的函数

def check_time(action):
    def do_action():
        action()
    return do_action
@check_time
def go_to_bed():
     print('去睡觉')
go_to_bed()

上面代码理解装饰器执行行为可理解成

result = check_time(go_to_bed)  # 把go_to_bed 当做参数传入给 check_time函数,再定义一个变量用来保存check_time的运行结果
result()  # check_time 函数的返回值result是一个函数, result()再调用这个函数,让它再调用go_to_bed函数

例2:被装饰的函数有参数

def check_time(action):
    def do_action(a,b):
        action(a,b)
    return do_action
@check_time
def go_to_bed(a,b):
     print('{}去{}睡觉'.format(a,b))
go_to_bed("zhangsan","床上")

例3:被装饰的函数有不定长参数

def test(cal):
    def do_cal(*args,**kwargs):
        cal(*args,**kwargs)
    return do_cal
@test
def demo(*args):
    sum = 0
    for x in args:
        sum +=x
    print(sum)
demo(1, 2, 3, 4)

例4:装饰器中的return

def test(cal):
    def do_cal(*args,**kwargs):
        return cal(*args,**kwargs)  # 需要再这里写return语句,表示调用函数,获取函数的返回值并返回
    return do_cal
@test
def demo(a,b):
    return a + b
print(demo(1, 2))  #3

总结:

一般情况下为了让装饰器更通用,可以有return

例5:装饰器带参数

def outer_check(time):
    def check_time(action):
        def do_action():
            if time < 22:
                return action()
            else:
                return '对不起,您不具有该权限'
        return do_action
    return check_time
@outer_check(23)
def play_game():
    return '玩儿游戏'
print(play_game())

提高:使用装饰器实现权限验证

以下代码不要求掌握,如果能看懂最好,如果能自己手动写出来,那就太棒了!

def outer_check(base_permission):
    def check_permission(action):
        def do_action(my_permission):
            if my_permission & base_permission:
                return action(my_permission)
            else:
                return '对不起,您不具有该权限'
        return do_action
    return check_permission
READ_PERMISSION = 1
WRITE_PERMISSION = 2
EXECUTE_PERMISSION = 4
@outer_check(base_permission=READ_PERMISSION)
def read(my_permission):
    return '读取数据'
@outer_check(base_permission=WRITE_PERMISSION)
def write(my_permission):
    return '写入数据'
@outer_check(base_permission=EXECUTE_PERMISSION)
def execute(my_permission):
    return '执行程序'
print(read(5))

相关文章
|
9天前
|
开发者 Python
探索Python中的装饰器:从基础到高级应用
【9月更文挑战第23天】在编程世界中,代码的重用性和可读性一直是开发者追求的目标。Python语言通过其独特的特性——装饰器,为这一目标提供了强有力的支持。本文将从装饰器的基本概念入手,逐步深入到其在函数和类中的应用,最后探讨如何自定义装饰器以解决实际问题,旨在帮助读者掌握装饰器的使用技巧,提升代码质量。
|
7天前
|
设计模式 缓存 测试技术
探索Python中的装饰器:从基础到高级应用
在本文中,我们将深入探讨Python中的装饰器,这是一种强大且灵活的工具,用于扩展或修改函数的行为。我们将从装饰器的基本概念和定义开始,逐步讲解它们的工作原理、如何创建和使用它们。接着,我们会探讨一些常见的装饰器用例,如日志记录、缓存和权限控制等。最后,本文将讨论一些高级话题,包括带参数的装饰器、使用functools模块增强装饰器以及装饰器与类方法的兼容问题。通过综合运用这些知识,您将能够更有效地利用Python的装饰器来优化您的代码。
21 10
|
4天前
|
Python
? Python 装饰器入门:让代码更灵活和可维护
? Python 装饰器入门:让代码更灵活和可维护
11 4
|
4天前
|
缓存 测试技术 Python
探索Python中的装饰器:简化代码,提高可读性
【9月更文挑战第28天】在Python编程中,装饰器是一个强大的工具,它允许我们在不修改原有函数代码的情况下增加额外的功能。本文将深入探讨装饰器的概念、使用方法及其在实际项目中的应用,帮助读者理解并运用装饰器来优化和提升代码的效率与可读性。通过具体示例,我们将展示如何创建自定义装饰器以及如何利用它们简化日常的编程任务。
10 3
|
5天前
|
Python
Python 装饰器入门:让代码更灵活和可维护
Python 装饰器入门:让代码更灵活和可维护
10 1
|
7天前
|
Python
探索Python编程中的装饰器魔法
【9月更文挑战第26天】在Python的世界里,装饰器就像是一把瑞士军刀,小巧而功能强大。它们让代码更简洁、可维护性更强。本文将通过实际示例,带你领略装饰器的魔力,从基础到进阶,一步步揭开它的神秘面纱。
12 2
|
7天前
|
设计模式 开发者 Python
Python中的装饰器:从入门到精通
【9月更文挑战第25天】本文深入浅出地介绍了Python装饰器的使用,包括其定义、语法和实际应用。通过实例演示如何利用装饰器增强函数功能,同时探讨了装饰器的高级用法如带参数的装饰器和装饰器嵌套。最后,文章强调了在设计装饰器时应避免的常见陷阱。
|
7天前
|
程序员 开发者 Python
探索Python中的装饰器:从基础到高级应用
本文旨在全面解析Python中一个强大而灵活的特性——装饰器(Decorators)。我们将从装饰器的基本定义出发,逐步深入到它们的高级应用。通过具体的代码示例和详细的解释,读者将能够掌握如何有效地使用装饰器来增强函数和类的功能,以及如何创建自定义装饰器来解决特定问题。无论是Python初学者还是经验丰富的开发者,都能在本文中找到有价值的内容,以提升编程技巧和代码质量。
13 1
|
7天前
|
设计模式 Python
深入浅出Python装饰器
【9月更文挑战第25天】装饰器在Python中是改变函数或类行为的利器,它们通过简洁的语法糖为代码增添功能。本文将一步步揭开装饰器的神秘面纱,从基础概念出发,到实战应用,最后探讨其背后的原理。你将学会如何用装饰器简化代码、增加功能,甚至控制函数执行流程,让编程更加高效和优雅。
|
7天前
|
设计模式 缓存 中间件
探索Python中的装饰器:从入门到实践
【9月更文挑战第25天】本文通过直观的语言和生动的比喻,深入浅出地介绍Python装饰器的概念、原理及应用。我们将一起走进装饰器的魔法世界,解锁其在代码编写中的强大功能,让你的代码更加优雅和高效。
下一篇
无影云桌面