IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python修饰器和Flask的app.route修饰器 -> 正文阅读

[Python知识库]Python修饰器和Flask的app.route修饰器

Python修饰器

学前班——函数闭包

Python作为开发效率极高的编程/脚本语言,函数可以作为一个参数传入另一个函数,或是在一个函数实现中嵌套一个或者多个函数。带来的一个特性就是函数闭包,所谓函数闭包就是一个函数return了一个内部嵌套函数

def func(a, b):
    c = 10
    //内部嵌套函数inner_func
    def inner_func():
        s = a + b + c
        return s
return inner_func  

在上方代码中,函数func返回了一个不同于自己的函数名称,而与这个函数名称(或是说返回值)相同的函数inner_func是函数func的内部嵌入函数。

假设函数func被执行,它的执行过程是这样的:

  1. 执行func(a,b)

  2. 传入变量a,b

  3. 建立局部变量c=10

  4. 返回值inner_func

- 注意,不要加(),不加括号表示返回func的函数地址

- 实际使用的时候需要加(),后面会补充
  1. 函数返回值与func内部嵌套函数一致,执行函数inner_func

  2. 继承被嵌套函数(本例为func)的传入值与已执行过程结果

- 传入值:a,b

- 已执行结果:c=10
  1. 执行s = a + b + c

  2. s作为返回值被返回

以上就是具有函数闭包特性的函数实例内容,理解了这部分内容,我们可以在此基础上不断套娃:

在main中调用时,需要注意调用方式:

由此我们可以知道,函数闭包的特性可以为某个函数通过嵌套函数的方式增加新的功能,这样不需要修改函数本身的代码就可以新添加功能。

我们可以重复这个过程不断地添加新功能。我们可以抽象为下面这个套娃模型:

显然,当添加功能次数过多,似乎这种特性也会变得复杂。大量的缩进,从阅读上来说,也很难再让人觉得新功能与功能是相对分离的。

于是,Python在此函数闭包的特性上进行了改进,提供了修饰器。

强大的修饰器——函数闭包的另一种形式

Python提供了强大的修饰器,其本身虽然在实现上和函数无异,但是用好修饰器可以更简单地为已有函数添加新的功能。并且无论是从代码阅读上还是编程过程上,都很好地实现了原有功能与新加入功能的分离。

可以看到,通过修饰器完美地将新功能分离了出去,不然还得套娃。另外就是调用执行变得简单了,直接执行装饰器中的函数就行了。

由于装饰器本质还是函数,还有很多种使用方式,具体可以见CSDN文章里的讲解。进对于app.route()的使用,目前的装饰器知识点够了。

@app.route()

Flask作为一种轻量WEB框架,程序实例在运行时需要知道你访问了哪个URL,这样才好知道要运行哪些代码,比如Flask库中默认的函数会根据传入URL调用Jinja模板渲染不同网页。在Flask中这种URL和函数的映射关系称为路由(route),app即为程序实例。

当然,只使用Flask默认的映射关系显然是不够的,因此我们需要按照当下需求添加新的功能。于是,Flask为实例提供了路由修饰器,即@app.route()。

上面代码是一个简单的例子,其作用是当

def func(a, b):
    c = 10
    //内部嵌套函数inner_func
    def inner_func():
        s = a + b + c
        	def inner_inner_func()sum = s + a + b + c
            return sum
        return inner_inner_func
return inner_func  
x = func(1, 3)//此时x的值是inner_func的地址以及传入参数的地址
print(x())//执行的时候需要带括号
def A()://根据需要可以传参
  [基本功能A]
  def B():
    [添加功能B]
    def C():
      [添加功能C]
      ......
      		def N():
          	[添加功能N]
          	return [具体结果]//也可以不返回,根据需要
        return N
      ......
    return D
  return C
return B
def funcA(newFunc)://函数名表示函数地址,通过地址传值实现函数传值
  print("执行1") 
  def inner_func:
    print("执行2")
    def inner_inner_func
    	print("执行3")
        newFunc()
    return OK
  return inner_inner_func
return inner_func

@funcA
def comment()//这里的本质:newFunc=comment, funcA(comment)
	print("执行4")

//执行
comment()
from flask import Flask

app = Flask(__name__)//实例化

@app.route('/')
	def newFunc1()
  		print('打印字体')
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:04  更:2022-10-31 11:52:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 2:57:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计