Python解析器的解析过程是怎样的

今天就跟大家聊聊有关Python解析器的解析过程是怎样的,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

成都创新互联公司是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10多年时间我们累计服务了上千家以及全国政企客户,如成都水电改造等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞扬。

首先先让大家看一下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的,即ascii ),并用其创建一般的字符串对象。也就是说,Unicode字符串跟一般字符串在内存中的存放格式是不一样的,前者使用UTF-8的格式,后者使用GB2312格式。

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

1、若字符串是一般的字符串,那么print只需把内存中相应的字节串推送给操作系统。如例子中的code 1。
2、如果字符串是Unicode字符串,那么print在推送之前先进行相应的encode:我们可以显示使用Unicode的encode方法使用合适的编码方式来编码(例子中code 2)

否则Python使用默认的编码方式进行编码,也就是ASCII(例子中的code 3)。当然ASCII是不可能正确编码中文的,因此Python报错。至此,上面的三个问题我们已经可以解析***和第三个了。至于第二个问题,因为Python中有两种字符串,一般字符串和Unicode字符串,两者都有各自的字符处理方法。

对于前者,方法是以字节的方式进行的,而且在GB2312中,每个汉字占用两个字节,因此得到的结果是5;对于后者,也就是 Unicode字符串,所有字符都是统一看待的,因此得到。

虽然上面只提到了控制台程序的中文问题,但是文件读写以及网络传输中出现的中文问题在原理上都是类似的。Unicode的出现可以很大程度上解决软件的国际化问题,同时Python为Unicode提供了极为良好的支持,因此,我建议大家在编写Python的程序时,都统一使用Unicode方式。

保存文件时使用UTF-8的编码方式。How to Use UTF-8 with Python有详细的描述,大家可以参考一下。Python中能导致出现中文问题的地方还很多,譬如文件的读写,网络数据的传输等,希望大家能多多交流,共同解决这些问题。

回顾一下使用Python解析器的流程:首先,先用编辑器编写好源代码,保存成文件。如果源代码中有编码声明而且用的编辑器支持该语法,那么该文件就以相应的编码方式保存在磁盘中。注意:编码声明和源文件的编码不一定是一致的,完全可以在编码声明中声明编码为UTF-8,但是用GB2312来保存源文件。

当然,这是自寻烦恼,而且好的IDE也应该保证两者的一致性。但是,如果。用记事本或者EditPlus等编辑器来编写代码的话,可能就会出现这种问题的。得到一个.py文件后,可以运行它。这是把代码交给Python解析器来完成解析工作。解析器读入文件时,先解析文件中的编码声明,假设文件的编码为gb2312。

那么先将文件中的内容由gb2312转换成Unicode,然后再把这些Unicode转换为UTF-8格式的字节串。完成这一步骤后,解析器把这些UTF-8字节串分段,解析。如果遇到使用Unicode字符串,那么就使用相应的UTF-8字节串创建Unicode字符串,如果程序中使用的是一般的字符串。

那么解析器先将UTF-8字节串通过Unicode转换成相应编码(这里就是gb2312编码)的字节串,并用其创建一般的字符串对象。也就是说,Unicode字符串跟一般字符串在内存中的存放格式是不一样的,前者使用UTF-8的格式,后者使用GB2312格式。

看完上述内容,你们对Python解析器的解析过程是怎样的有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网页题目:Python解析器的解析过程是怎样的
文章起源:http://myzitong.com/article/jodihe.html