发布于: 2023-7-6最后更新: 2023-7-25字数 00 分钟

Python教程

python装饰器

Python执行流程和Module理解(Point)

总的来说,Python的执行过程,就是解释器从main.py(Python xx.py这个xx就是作为main)开始,逐行翻译代码,碰到需要执行的就进行执行。特别要注意的是,一切都是对象这种特性,作为动态语言,在前面定义的内容很可能在后面会被修改掉。比如一个函数定义,在后面可以被替换为另一个函数的实现。
再有就是模块的概念,也就是import使用其他py文件。
比如我们导入包里面的一个模块:
关于模块导入的本质实现,大概流程如下:
查看已导入包:
通过sys.modules可以访问所有当前已导入的模块。 modules是一个字典,key是模块的路径,例如pack1.module_a, value是一个模块对象 模块对象中,属性名是模块中全局变量的名字,即sys.modules['pack1.module_a'].__dict__等于module_a里面的globals().
基于此,对Python中循环导入问题的探讨
首先看一下什么是循环导入和循环导入的原因。
root.py
module_a.py
module_b.py
会报错:
代码执行的流程:
  1. 执行root.py的from pack1.module_a import class_a,发现需要导入模块module_a
  1. 一个空的字典会被创建,对应module_a的globals
  1. module_a的代码会被执行,当执行到from pack2.module_b import class_b时,发现需要导入模块module_b
  1. 一个空的字典会被创建,对应module_b的globals
  1. module_b的代码会被执行,当执行到from pack1.module_a import class_a时,发现需要导入模块module_a,但是此时已经有module_a的globals了,所以直接访问字典里的class_a,但是由于module_a的globals还是空的,即里面没有class_a,所以抛出异常
解决方法参考前面的博客,这个只是为了理解处理流程。
类似的示例:
module导入示例

Flask SQLAlchemy
Flask SQLAlchemy

Flask SQLAlchemy是一个用于在Flask应用程序中使用SQLAlchemy的扩展。它提供了一种简单的方法来管理数据库连接和ORM模型,以及一些高级功能,如水平分片。本文介绍了Flask SQLAlchemy的一些基本用法和高级特性,包括反射、自定义模型、水平分片等。此外,还介绍了SQLAlchemy的一些核心概念,如Engine、Connection、Session、MetaData和ORM。


WSGI
WSGI

WSGI是Python用于连接Web服务器和Web应用程序的标准接口。它定义了服务器和应用程序之间通信的规则和协议,使得不同的Web服务器和应用程序之间互通变得更容易。常用的Python Web框架包括Flask、Django、Tornado、Bottle等,这些框架提供了一些函数或类到WSGI服务器,然后WSGI服务器通过协议和提供的函数最终连接到Python Web应用程序中,完成处理请求和响应的功能。Werkzeug是一个WSGI工具库,它提供了许多用于构建Web应用程序的工具,其中run_simple是Werkzeug库中的一个函数,它可以快速地启动一个简单的局域网应用程序服务器。