极客小将

您现在的位置是:首页 » 原创课程 » Python

课程内容

Python入门课程NO60课 函数装饰器

极客小将2020-08-27-
装饰器是一种软件设计模式,可以对已有的对象进行功能上的扩展,而无需改变其结构。如何使用装饰器来进行功能上的扩展?我们得先学习Python中的闭包函数。闭包函数:简单地理解,就是函数中定义的一个内部函数,该内部函数可以访问外部函数作用域中的参数,变量。使用闭包进行

装饰器是一种软件设计模式,可以对已有的对象进行功能上的扩展,而无需改变其结构。如何使用装饰器来进行功能上的扩展?我们得先学习Python中的闭包函数。

闭包函数:简单地理解,就是函数中定义的一个内部函数,该内部函数可以访问外部函数作用域中的参数,变量。

使用闭包进行功能扩展(即:装饰器):

假如我们有个项目在初期是允许任何访问者查看的,代码如下:

随着项目的不断迭代,我们需要方可登陆后才能浏览此页面,那么我们就有两种选择,一种是直接修改welcome函数,另一种就是使用函数装饰器,前面已经讲过,函数装饰器是对已有对象进行功能上的扩展,而不改变其结构。很明显选择装饰器更为合适。我们来做一些修改。

装饰器语法糖:

在上面的代码片段中,不够直观和自然,因为需要将被装饰的函数作为参数传递给装饰器,还需要再执行返回的闭包函数,那么如何才能更优雅的使用呢?

Python中提供了语法糖,在函数头前面加上一行@decortator的修饰符,可以对当前函数进行装饰,decortator表示具体的装饰器名。在上文的代码中,login函数就是一种装饰器,现在使用@符号来对welcome函数进行装饰。以上程序可以修改为:

对welcome函数使用@login进行装饰以后,Python会自动将wecome函数作为参数传递给login函数, 并执行返回的闭包函数,这是Python装饰器的核心逻辑所在。装饰器中的闭包函数参数须与被装饰对象的参数一致,在不确定被装饰对象的参数时,可以使用可变参数:*args, **kwargs。 使用可变参数的装饰器结构:

装饰器也是用来进行功能上的扩展。在面向对象中,装饰器是一种软件设计模式,可以对已有的对象进行功能上的扩展,而无需改变其结构。 闭包函数,简单地理解,就是函数中定义的一个内部函数,该内部函数可以访问外部函数作用域中的参数,变量。

网友点评

共有5条评论来说两句吧...

在线客服