3

我一直在绘制解释基本编程概念的教育漫画。此刻,我正在做一个关于控制流的,一个领域让我大吃一惊:计算机在完成控制流中程序最终主路径的所有命令之后会做什么。

我以为它会“退出”程序作为结束它的一种方式,但其他消息来源非常被动地说,“程序退出计算机。” 这部分对我来说听起来很奇怪,因为当我可视化控制流时,计算机正在一个接一个地执行命令,直到它遇到某种程序的“结束”。

这是我的工作草稿,用于解释我正在处理的内容:

https://prairieworldcomicsblog.files.wordpress.com/2018/03/controlflowpencil.pdf

在这部漫画的结尾,在这里形象化这个“结局”的最佳比喻是什么?

4

3 回答 3

1

好吧,在某种程度上,您可以将操作系统视为一个更高级别的程序,它会暂时将控制权交给用户的程序(现实更复杂,fork许多进程并行运行,但您可能会忽略这一点) . 当程序结束时,控制权回到操作系统,就像一个函数在程序中结束后控制权回到主流程一样。

所以也许你应该在程序的末尾有一个“warp portal”,并描述它如何让你回到 OS 程序的控制流(例如命令提示符)。

我对您的某些图像有一个建议,与您当前的问题无关。else如果您在控制流“道路”中使用分叉和合并,而不是总是使用带您回到主路径的经线门户,那么描述一些控制结构(如分支)可能会更容易。门户绝对是有用的,但我会将它们限制在诸如调用和从函数返回之类的事情上。

if(和elif/ )只是道路上的else一个岔路口。这两个(或更多)分支可以在一段时间后重新组合,所以如果你能原谅我糟糕的 ASCII 艺术,你可能会有这样的事情:

       --> if block -->
      /                \
--> if -> else block -> regular control flow resumes ->

一个while循环非常相似,它只是让它的块流向另一个方向运行,所以你在分支分裂之前合并:

  <- while block <-
 /                 \
|                   ^
v                   |
 \                 /
---> while condition -> regular control flow resumes ->
于 2018-03-31T21:26:20.547 回答
0

解释器的生命周期在https://wiki.python.org/moin/CPythonInterpreterInitialization中可视化。最终确定部分基本上是:

  • sts= <运行用户代码的结果,在任何请求的模式下>
  • Py_Finalize()
  • 退出状态sts

Py_Finalize那里没有解释什么。一些解释在它的文档中:

撤消所有由 Python/C API 函数进行的初始化Py_Initialize()和后续使用,并销毁所有已创建但尚未销毁的子解释器 <...>

Bug 和注意事项:模块和模块中对象的销毁是按随机顺序进行的;这可能会导致析构函数(__del__()方法)在依赖于其他对象(甚至函数)或模块时失败。<...>

因此,粗略地说,它会垃圾收集包括模块在内的所有对象。在此之前它还会调用atexit处理程序。该函数的源代码可以pythonrun.cPy2pythonlifecycle.cPy3 1中找到,您可以获得更精确的图片。

我不知道如何在儿童漫画中表达这一点(也就是说,你也没有涵盖初始化序列),但基本上,这就是发生的事情。


1其中仅包含对 的调用Py_FinalizeEx,因此我直接链接到该例程。

于 2018-03-31T21:07:32.573 回答
0

计算机程序就像一个小镇(或主要城市),建在您旅行的道路上,而计算机可能是国家(或地球)。

当您开始一个新项目时,就好像您正在开车(或步行)游览那个城市。你要么穿过主要街道,然后什么都不做就离开城镇(也许是一句“Hello Folks”),或者决定去一家商店(在那里你回答了一个 IF 问题“你想购物吗?”)。然后你喜欢这个小镇并想在这里呆几天(另一个回答如果)。现在你处于“醒来,吃早餐,出去,玩得开心,吃午餐,去玩得更开心,吃晚餐,睡觉”的循环中几天。这里的每个活动也都有自己的决策树和循环。最后,您再次将车开到出口并离开小镇。

而已!你离开小镇,继续前往另一个小镇的旅程。作为写在磁盘上的程序,它会在另一天访问。这不是您当前活跃旅行的一部分。就这样。

哦,对了,你就是这个比喻的CPU。你是执行所有这些计划的人。如果您有朋友或家人陪伴,这意味着您也可以同时处理多项任务。如果您计划整个旅程,您也可以成为程序员。

程序结束时发生的事情只是从活动内存中删除,直到下次运行,而不是从计算机中删除。就像那个小镇一样。计算机继续执行其他活动程序以及我们同时运行多个程序的操作系统(多任务处理)。关闭计算机的比喻是什么?你可以想象我猜。

ps:这不仅仅是一个python相关的话题,你知道的,对吧?

于 2018-03-31T21:26:11.540 回答