我一直在画教育漫画,解释基本的编程概念。目前,我正在做一个关于控制流的工作,有一个领域让我感到困惑:在完成控制流中程序最终主路径的所有命令之后,计算机做了什么。你知道吗
我以为它会“退出”程序作为结束它的一种方式,但其他消息来源说,非常被动地,“程序退出计算机。”这部分听起来很奇怪,因为当我可视化控制流时,计算机正在一个接一个地执行命令,直到它碰到某种程序的“结束”。你知道吗
这是我的作品草稿,解释我在处理什么:
https://prairieworldcomicsblog.files.wordpress.com/2018/03/controlflowpencil.pdf
在这部漫画的结尾,什么是最好的隐喻来形象化这个“结局”?你知道吗
好吧,在某种程度上,你可以把操作系统想象成一个更高层次的程序,暂时把控制权交给用户的程序(现实情况更复杂,因为
fork
和许多并行运行的进程,但你可能忽略了这一点)。当程序结束时,控制返回到操作系统,就像函数在程序中结束后控制返回到主流程一样。你知道吗因此,也许您应该在程序的末尾有一个“warp portal”,并描述它是如何将您引导回操作系统程序的控制流(例如命令提示符)的。你知道吗
我对你的一些形象有一个建议,与你现在的问题无关。如果您在控制流“road”中使用分叉和合并,那么描述一些控制结构(如
else
分支)可能会更容易,而不是总是使用带您返回主路径的扭曲门户。门户绝对是有用的,但我将它们限制在调用和从函数返回之类的事情上。你知道吗一个
if
(和elif
/else
)只是一个岔路口。两个(或更多)分支可以在一段时间后重新组合,因此如果您原谅我糟糕的ASCII艺术,您可能会有这样的结果:一个
while
循环非常相似,它只是让它的块流朝另一个方向运行,所以在分支分离之前合并:解释器的生命周期在https://wiki.python.org/moin/CPythonInterpreterInitialization可视化。定稿部分基本上是:
sts
=<;以请求的任何模式运行用户代码的结果>sts
这里没有解释
Py_Finalize
的作用。一些解释在its documentation中:所以,粗略地说,它垃圾收集包括模块在内的所有对象。在此之前它还调用} for Py2 和^{} for Py3 1中找到,在那里可以获得更精确的图片。你知道吗
atexit
处理程序。函数的源代码可以在in ^{我不知道如何在儿童漫画中表达这一点(也就是说,你没有涉及初始化序列),但基本上,这就是发生的事情。你知道吗
1其中它只包含对
Py_FinalizeEx
的调用,因此我直接链接到该例程。一个计算机程序就像一个小镇(或主城),建在你旅途的道路上,而计算机可能就是这个国家(或地球)。你知道吗
当你开始一个新的项目时,就好像你在开车(或步行)游览那个城市。你要么穿过大街,什么都不做就离开了小镇(也许是说“大家好”),要么决定去商店(在那里你回答了一个IF问题“你想购物吗?”)。然后你喜欢这个小镇,想在这里住几天(如果有人回答的话)。现在你陷入了“醒来,吃早餐,出去,玩,吃午餐,去寻找更多的乐趣,吃晚餐,睡觉”的循环中。这里的每个活动都有自己的决策树和循环。最后,你又把车开到出口,离开了小镇。你知道吗
就这样!你离开这个城镇,继续你的旅程到另一个城镇。它是在那里访问另一天,作为一个程序写在磁盘上。这并不是你当前活动行程的一部分。这就是全部。你知道吗
哦,顺便说一句,你就是这个比喻的CPU。你是执行所有这些计划的人。如果你有朋友或家人在身边,这意味着你也可以同时处理多个任务。如果你计划好整个旅程,你也可以成为程序员。你知道吗
当一个程序结束时所发生的只是从活动内存中删除到下一次运行,而不是从计算机中删除。就像那个小镇。计算机继续执行其他活动程序,同时在其操作系统上运行多个程序(多任务)。关闭电脑的类比是什么?你可以想象我猜。你知道吗
ps:这不仅仅是一个与python相关的话题,你知道的,对吧?你知道吗
相关问题 更多 >
编程相关推荐