Python进阶I,Python的编译

Python在执行阶段,作为程序的主模块首先需要编译,然后进行解释,将二进制代码解释成CPU中的指令。
编译的过程是什么样的呢?
Python编译器首先将code编译成多个代码行,这个行是逻辑行

逻辑行是由一个物理行,或多个通过显示或隐式行连接规则连接在一起的物理行组成的。
  物理行就是各个平台下的换行+回车的二进制代码的表示,其中windows是\r\n,linux是\n。将换行+回车以NEWLINE标记替换。
  显示行连接规则是通过在多个物理行中使用 “\” 合并,这个合并的检测是在检测\n如果出现\n则说明下一行也是逻辑行。其中将\n以NEWLINE标记替换。
  隐式行连接规则则是检测如果在开头有(,[,{这三种,则后面无论跨越多少行,只要没有出现),],}都视为一个逻辑行。其中在),],}后加入NEWLINE标记。
  关于注释,注释是通过检测是否存在#字符,正常情况下如果在一行中出现了#字符,则#字符后面不计入逻辑行,直接在#字符前加入NEWLINE标记。
  关于NEWLINE标记的设想,众所周知,我们最开始写的code就是一群二进制代码,其中包含了换行符号,空格符号,tab符号,换页符号以及代码,注释等等,编译首先需要做的是什么?
     就是将其二进制代码进行处理,将其中的代码指令按序提取出来,模拟一下编译的执行过程,首先编译程序在CPU中运行,第一步将code从硬盘中读到内存中,然后将code再从内存中读入CPU的寄存器中,然后根据编译程序的指令+code作为数据,进行分析处理,这个时候要划分出逻辑行,作为代码执行的一个小的代码块,而这个逻辑行的区分是通过什么来划分的呢?
      这就是通过添加NEWLINE标记来进行区分的

代码块划分完成了,那么接下来应该怎么做呢?
  接下来就是对于缩进的处理了,来进行分层次。
    缩进是通过空格符号来代表的,其中tab键被认为是多个空格符号,具体几个可以设定。
    第一个非空字符前的空格数决定了行的缩进格式,例如在第一个字符前有两个空格,那么他的下一层应该是4个空格。
    在缩进的过程中使用了栈的数据结构,文件的第一行未被读取前,一个0被压入栈中,以后再也不会被弹出,栈的特性是先进后出,栈顶永远是最后进的数字。在每个逻辑行的开头处,先获得空格符号的个数,然后和栈顶比较:
      如果相等则说明处于同一个层次,则什么都不做
      如果大于则说明处于栈顶的下一层次,这个时候就会在该代码块中加入INDENT符号(猜测是在该代码块的头部)
       如果小于栈顶元素,说明上一层次已经结束了,这个时候,栈会弹出所有大于该空格数的数字,然后在这一代码块(头部)加入DEDENT语言符号
      文件的结尾处如果栈中的元素仍然大于1,则说明层次已经结束,例如:

                       if a>1:
                                 if b>2:
                                            c=3

这个时候就在c=3这个代码块中,也就是逻辑行的尾部加入一个DEDENT语言符号,示意已经结束。

tap:在编译的过程中,缩进分层和分割逻辑行应该同时进行的,没有先后顺序之分,只不过为了说明,我主观的将其进行了一个先后。
在缩进分层和分割逻辑行的同时,对于code文件中的代码也进行了编译,这个编译是对于代码进行处理。

ps:关于主程序编译后不保存,然后对于导入新的模块时,进行编译保存这些将会在import时说明。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容