加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Flask 中的装饰器

发布时间:2023-06-29 14:07:55 所属栏目:教程 来源:
导读:总体来说,Python 的语法比较简单,是一门易学的编程语言。但是,Python 的装饰器语法是一个例外,装饰器是 Python 语言的高级语法,牵涉到高阶函数等内容,对初学者来说较难理解。

看到这里你可能会问:咱们这门
总体来说,Python 的语法比较简单,是一门易学的编程语言。但是,Python 的装饰器语法是一个例外,装饰器是 Python 语言的高级语法,牵涉到高阶函数等内容,对初学者来说较难理解。

看到这里你可能会问:咱们这门课程不是学习 Flask 框架吗?怎么又扯到装饰器上面去了?
这是因为装饰器语法在 Flask 框架中得到了广泛的应用,想要学好 Flask 框架不理解装饰器的概念是不行滴。

因此这个小节我们就专门来讨论下装饰器的用途、定义和原理,为大家深入理解 Flask 框架原理打下一个重要基础。

高阶函数

把函数当作对象

本节从底层原理讲解了如何实现装饰器,学员需要深入理解 Python 中 “函数是第一类对象” 的概念,可以参考词条 “Python 的 lambda 表达式”。在这个词条中对这一概念具有比较系统的讲解。

在 Python 中,函数是第一类对象的意思是指函数作为一个对象,与其它对象具有相同的地位。具体来说,一个数值对象可以:

被赋值给变量;
作为参数传递给函数;
作为返回值。
因为函数和数值具有相同的地位,所以函数也可以:

被赋值给变量;
作为参数传递给函数;
作为返回值。
1.2 把函数作为输入参数
上面说到函数也可以被作为参数传递给另外一个函数,下面我们就用一个例子来演示一下:

def double(item):
    return item + item
def triple(item):
    return item + item + item
定义函数 double,返回输入值的 2 倍;定义函数 triple,返回输入值的 3 倍。

def map(func, input):
    output = []
    for item in input:
        new_item = func(item)
        output.append(new_item)
    return output
定义函数 map,接受两个参数:func 和 input。参数 func 是一个函数,参数 input 是一个列表, 对输入列表 input 中的每个元素依次进行处理,返回一个新列表 output。

在第 3 行,遍历输入列表 input 中的每个元素,调用 func (item) 生成一个新的元素 new_item,将 new_item 加入到 output 中,最后返回 output。

print(map(double, [, , ]))
print(map(triple, [, , ]))
对序列 [1, 2, 3] 中的每个元素使用函数 double 进行处理;对序列 [1, 2, 3] 中的每个元素使用函数 triple 进行处理。

运行程序,输出如下:

[2, 4, 6]
[3, 6, 9]
序列 [1, 2, 3] 中的每个元素乘以 2 后,得到序列 [2, 4, 6];序列 [1, 2, 3] 中的每个元素乘以 3 后,得到序列 [3, 6, 9]。

1.3 把函数作为返回值
在下面的例子中,将函数作为返回值:

def func():
    print('Inside func')
def return_func():   
    print('Inside return_func')
    return func
在第 1 行,定义函数 func;在第 3 行,定义函数 return_func,函数 return_func 返回一个函数类型的对象,将函数 func 作为值返回。

var = return_func() 
var()
调用 return_func (),将函数的返回值保存到变量 var。变量 var 的类型是函数,因此可以进行函数调用。

程序的输出结果如下:

Inside return_func
Inside func

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章