高级装饰器| 学习笔记

简介: 快速学习高级装饰器

开发者学堂课程Python入门 2020年版高级装饰器】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10419


高级装饰器

内容介绍:

一、装饰器回顾

二、高级装饰器

 

一、装饰器回顾

1、定义

装饰器其实就是一个函数,我们通过之前所写的一个案例进行回顾装饰器的定义

l 输入基本代码

def play_ game (name, game):

print(name + ' 正在玩儿' + game)

l 判断代码是否能够正常运行

def can_ play(fn):

print( '外部函数被调用了')

def inner():

pass

return inner

@can_ play

此时已经写入了装饰器,一旦写入就会去调用can_ play函数,运行之后显示:外部函数被调用了。

然后 play game 就会传给fn,再去调用play game时,它就已经不是原来的了。

l 最终代码如下:

def can_ play(fn):

print('外部函数被调用了')

def inner(name, game):

fn(name, game )

return inner

@can_ play

def play_ game (name, game):

print(name + ' 正在玩儿' + game)

play_ game('张三' '王者荣耀')

l  运行结果为:

l  张三正在玩儿王者荣耀

2、装饰器作用:

(1) 调用can_ play函数

(2) 被装饰的函数传给fn

(3)  再次写play_ game对应的为返回值return inner

3、进行时间限定

l  具体代码:

def can_ play(fn):

print( '外部函数被调用了')

def inner(name, game, **kwargs):

clock = kwargs .get('clock', 21)

if clock >= 21:

print('太晚了不能玩儿游戏了')

else:

fn(name, game)

return inner

@can_ _play

def play_ game(name, game):

print(name +'正在玩儿' + game)

play_ game('张三' '王者荣耀'clock=22)

l  代码解释:

由于多了clock 参数,因此此时运行会报错,我们需要对其进行解释,所以输入**kwargs,但是直接通过kwargs=('clock', 22}传入会出现一个问题,即当没有传入clock值时就去运行,系统会崩溃,因此我们需要写为clock = kwargs .get('clock', 21)

l 运行结果为:

太晚了不能玩儿游戏了,如果将时间限制改为20,没有超过时间限制,则运行结果为张三正在玩儿游戏。


二、高级装饰器

1、引言

我们可以看到像上述所讲的装饰器还是不够强大,需要我们人为的传入一个参数,而高级的传输器就可以很好的解决上述所出现的问题。

2、具体代码

def can_ play(clock):

print(‘最外层函数被调用了,clock={}’.format(clock))

def handle_ action(fn):

def do_ action(name,game):

if  clock <  21:

fn(name,game)

else:

print(‘太晚了,不能玩儿游戏了’)

return do_ action

return handle_ action

@can_ play(20)

def play_ game(name, game):

print(name + ' 正在玩儿'+ game)

play_ game

3、代码解释

@can_ play(20)就可以表示函数,即装饰器函数带参数。因此高级装饰器的结果就更为复杂一些一旦输入了装饰器,最外层函数就会调用,然后将22传给 clock

需要注意的是,返回时can-play返回return handle_ action的值,然后return do_ action 再表示 handle_ action 的返回值。

上述就完成了第一步,第二步需要将play_ game给到fn,此时调用的就是do_ action了,运行后会发现报错,因为我们需要在def do_ action(name,game):中传入参数,然后再通过判断时间if  clock  < 21:,决定是否可以进行继续玩游戏。

上述举例就可以体现高级装饰器的强大之处,不需要对原有的部分代码进行任何修改,只需要再进行下一步的修饰。

如果直接写@can_ play,即不加()直接调用,调用的就是print(‘最外层函数被调用了,clock={}’.format(clock))这一层;

如果写@can_ play(12),调用的时候首先调用 print(‘最外层函数被调用了,clock={}’.format(clock)),并将值给到 clock,即调用can_ play函数,并将12传递给clock变量;紧接着再调用handle_ action方法,把play_ game传递给 fn

紧接着再调用play_ game,其实调用的就是 do_ action

相关文章
|
1月前
|
设计模式 开发框架 测试技术
探索Python编程中的装饰器
【9月更文挑战第36天】在Python的世界里,装饰器是一个既神秘又强大的工具。它们不仅能够增强函数的功能,还能让代码更加简洁和模块化。本文将通过实例介绍装饰器的基本概念、使用方法以及如何自定义装饰器,旨在帮助读者掌握这一实用技术,从而提升代码的可读性和复用性。
|
28天前
|
设计模式 缓存 Python
Python编程中的装饰器:从基础到高级应用
【10月更文挑战第7天】 本文深入探讨了Python中装饰器的使用,从基本概念到高级应用全面解析。通过具体示例,读者将能清晰理解装饰器的本质、实现方式及其在代码优化和功能增强中的重要作用。
13 0
|
2月前
|
缓存 开发者 Python
Python编程中的装饰器深入解析
【9月更文挑战第20天】本文将带领读者深入了解Python编程中一个强大且神秘的功能——装饰器。我们将从装饰器的基本概念出发,逐步探索它的工作原理、使用场景以及如何自定义装饰器。文章不仅会用通俗易懂的语言解释复杂的技术概念,还将通过实际代码示例展示装饰器的强大功能和灵活性。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往更高效、更优雅代码编写的大门。
40 11
|
2月前
|
Python
探索Python编程中的装饰器魔法
【9月更文挑战第26天】在Python的世界里,装饰器就像是一把瑞士军刀,小巧而功能强大。它们让代码更简洁、可维护性更强。本文将通过实际示例,带你领略装饰器的魔力,从基础到进阶,一步步揭开它的神秘面纱。
17 2
|
2月前
|
测试技术 Python
探索Python中的装饰器:从基础概念到高级应用
本文深入探讨了Python中一个强大而灵活的特性——装饰器。从其基本定义出发,逐步解析装饰器的本质、运作机制以及如何高效利用这一工具来优化代码结构、增加功能和提升代码的可读性与可维护性。通过具体示例,包括自定义简单装饰器、带参数装饰器、多重装饰等高级话题,本文展示了装饰器在软件开发中的广泛应用,旨在为读者提供一个全面而实用的装饰器使用指南。
|
2月前
|
Python
掌握Python装饰器:从基础到高级应用
本文深入探讨了Python装饰器的用法,通过具体示例展示了如何定义和使用方法。同时,文章还涵盖了装饰器的高级应用,包括带参数的装饰器、类装饰器以及如何在标准库中使用装饰器。通过阅读这篇文章,读者将能够更好地理解和利用Python中的装饰器来提高代码的可重用性和可维护性。
|
4月前
|
Python
Python编程实战:利用闭包与装饰器优化日志记录功能
【7月更文挑战第7天】Python的闭包和装饰器简化了日志记录。通过定义如`log_decorator`的装饰器,可以在不修改原函数代码的情况下添加日志功能。当@log_decorator用于`add(x, y)`函数时,调用时自动记录日志。进一步,`timestamp_log_decorator`展示了如何创建特定功能的装饰器,如添加时间戳。这些技术减少了代码冗余,提高了代码的可维护性。
61 1
|
6月前
|
Python
Python编程中的装饰器应用探索
【2月更文挑战第6天】本文将深入探讨Python编程中装饰器的应用,介绍装饰器的定义、作用以及实际应用场景,并结合示例代码详细阐释装饰器在函数、类等方面的灵活运用,帮助读者更好地理解和使用装饰器提升代码的可复用性和可维护性。
|
6月前
|
缓存 开发者 Python
Python编程中的装饰器技术解析
本文将深入探讨Python编程中的装饰器技术,包括装饰器的基本概念、使用场景以及实际应用案例。通过了解装饰器的原理和灵活运用,读者可以提升代码的可维护性和扩展性,实现更优雅的编程。
|
开发者 Python
高级编程技巧揭秘!精通Python装饰器,打造灵活强大的代码结构!
装饰器是Python中一种强大而灵活的编程技巧,它可以用于修改或扩展函数的行为,同时又不需要修改函数的源代码。本文将介绍Python中的装饰器的基本概念、使用方法以及高级技巧,帮助你从入门到精通装饰器的使用。
297 0