• 解析器解析全过程


    首先,我们先让大家看一下python解析器的全流程:

    我们编辑器编写好源代码->保存成文件。如果源代码中有编码声明而且用的编辑器支持该语法,那么该文件就以相应的编码方式保存在磁盘中。

    注意:编码声明和源文件的编码不一定是一致的,你完全可以在编码声明中声明编码为utf-8,但是用GB2312来保存源文件。当然,我们不可能自寻烦恼,故意写错,而且,好的IDE也能强制保证两者的一致性,但是,如果我们用记事本或者editplus等编辑器来编写代码的话,一不小心就会出现这种问题的。

    得到一个.py文件后,我们就可以运行它了,这时,我们就把代码交给python解析器来完成解析工作。

    解析器读入文件时,先解析文件中的编码声明,我们假设文件的编码声明为GB2312,那么解析器会先将文件中的内容由GB2312转换成Unicode,然后再把这些Unicode转换成utf-8格式的字符串。

    注意:这里仅指源代码即脚本代码的纯代码转换,完成这一步骤后,解析器把这些utf-8字符串分段,解析。如果遇到使用unicode字符串(如,u‘中国a我爱你’)那么就使用相应的utf-8字符串创建unicode字符串。

    如果程序中使用的是一般的字符串,那么,解析器先将utf-8字符串通过unicode转换成相应的编码(这里也就是gb2312)的字符串,并用其创建一半的字符串对象,也就是说,unicode字符串根一般字符串在内存中的存放格式是不一样的,前者是用utf-8的格式,后者是用gb2312的格式。(注:普通的,非unicode的,即ascii)

    好了,内存中的字符串格式我们知道了,下面我们要了解print的工作方式,print其实是负责把内存中相应的字符串交给操作系统,让操作系统相应的程序,比如cmd窗口进行展示,这里有两种情况:

    1、若字符串是一般的字符串,那么print只需要把内存中相应的字符串推送给操作系统。

    2、如果字符串是unicode字符串,那么print在推送之前先进行相应的encode,我们可以显示使用unicode的encode方式使用合适的编码来编码。

    【链接】浅析Python解析器解析全过程:http://www.th7.cn/Program/Python/201508/548091.shtml

  • 相关阅读:
    设计模式复习-状态模式
    设计模式复习-观察者模式
    设计模式复习-建造者模式
    设计模式复习-外观模式
    推荐算法-协同过滤
    设计模式复习-模板方法模式
    设计模式复习-原型模式
    设计模式复习-代理模式
    神经网络与机器学习 笔记—泛化和交叉验证
    神经网络与机器学习 笔记—改善反向传播的性能试探法
  • 原文地址:https://www.cnblogs.com/themost/p/6662399.html
Copyright © 2020-2023  润新知