python - 难以理解 python 类中的控制流(在谷歌应用引擎中)

标签 python class control-flow

伙计们,我在理解 python 类中的控制流时遇到了一些麻烦,即代码一步一步发生了什么。鉴于下面的简短代码,我想知道:当调用 MainPage 类时,它只执行该类中的所有内容吗?按线性顺序? (第一行,第二行之后等等)

enter image description here

最佳答案

执行Python文件时,文件中的每条语句都是从上到下执行的。在您的情况下,有六个陈述:

from ..
from ..
class MainPage ..
application = ..
def main() ..
if __name__ ..

前两个找到其他 Python 模块,并执行它们的所有语句,这些语句可能只是定义了一堆类,然后使用来自其他模块的值在您的模块中定义了一些名称。所以在前两个语句之后,我们定义了 webapprun_wsgi_app

第三条语句定义类 MainPage。它通过执行类体内的语句来做到这一点,在本例中只有一个:def。请注意,执行 def 语句不会执行函数体中的语句,它只是将这些语句收集到命名函数中。当类主体结束时,所有定义的名称都成为类的属性。

第四条语句调用webapp.WSGIApplication,并将结果赋给application

第五条语句定义了一个名为 main 的函数。

第六条语句查看名称__name__。每次执行 Python 文件时,它都会被赋予一个 __name__ 变量。如果该文件是正在运行的主文件,即 Python 启动的文件,则 __name__ 的值为 "__main__"。这个 if 语句是一个成语,意思是“我是主程序吗?”在这种情况下,它是,所以 if 语句的主体也被执行。

if 的主体只是调用 main() 函数,它本身调用 run_wsgi_app 函数,传递您已经构建的 application的值(value)。

虽然涉及运行 WSGI 应用程序,但基本上相当于“等到有人访问 URL,然后将 URL 映射到一些代码,然后执行代码”。在您的例子中,您提供了一个将“/”与 MainPage 相关联的 URL 映射。一旦有人访问/URL,就会创建一个 MainPage 对象,并调用其中的方法。

特别地,因为用于访问/的 HTTP 方法是 GET,所以 WSGI 应用程序运行器调用 MainPage 对象上的 .get() 方法。 get 方法中的语句按顺序执行,将一些数据写入响应。当函数体中没有更多的语句时,它返回。 WSGI 应用程序容器将该响应发送回 Web 浏览器!

这个程序永远不会结束,因为 WSGI 应用程序运行器永远循环等待下一个 URL 访问。但如果没有,一旦主文件中的最后一条语句完成,Python 程序就会完成,进程就会结束。

关于python - 难以理解 python 类中的控制流(在谷歌应用引擎中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10364715/

相关文章:

python - 为什么在 python map() 和 multiprocessing.Pool.map() 中得到不同的答案?

python - Flask-SQLAlchemy 查询多对多

ruby - 根据 my_times 定义 my_each

python - 可以在内联注释中指定哪些 pylint 选项?

python - Python:无法复制内存使用情况的测试

c++ - 如何在 C++ 中引用结构组件

java - java中如何从父类对象加载子对象

C++、类、Const 和奇怪的语法

javascript - 使用 yield 作为异步控制流有什么好处?

mysql存储过程: flow control