Python Day01,,Python 代码执


Python 代码执行流程:

  编译 --> 执行  源代码 --> 字节码 --> 机器码 --> CPU执行

python 先将自己的源代码,编译成Python 字节码,不同语言的字节码,只有对应的编译器可以识别,运行时再将字节码转换成机器码在执行,经过了现两个转换的步骤,所以比 C 语言要慢一个量级。

Python 的几种实现:

python 作为一种编程语言,它有多种实现。这里的实现指的是符合Python语言规范的Python解释程序以及标准库等。这些实现虽然实现的是同一种语言,但是彼此之间,特别是与CPython之间还是有些差别的。

1、CPython:Python的官方版本,使用C语言实现,使用最为广泛,新的语言特性一般也最先出现在这里。
    C 语言实现的 python --> C 解释器 --> .pyc(字节码) --> 机器码 --> CPU执行

2、Jpython:这是Python的Java实现,相比于CPython,它与Java语言之间的互操作性要远远高于CPython和C语言之间的互操作性。

    java 实现的 python --> java 解释器 --> java字节码 --> 机器码 --> CPU执行

3、Python for .NET:它实质上是CPython实现的.NET托管版本,它与.NET库和程序代码有很好的互操作性。
4、IronPython:不同于Python for .NET,它是Python的C#实现,并且它将Python代码编译成C#中间代码(与Jython类似),然后运行,它与.NET语言的互操作性也非常好。

5、PyPy:Python的Python实现版本,原理是这样的,PyPy运行在CPython(或者其它实现)之上,用户程序运行在PyPy之上。它的一个目标是成为Python语言自身的试验场,因为可以很容易地修改PyPy解释器的实现(因为它是使用Python写的)。

    python 源代码 --> py解释器 --> 字节码、机器码(编译过程中就已经生成机器码) --> CPU 执行

Python 执行过程:

  语法分析 (检测你的语法是否有问题)  词法分析( 说明代码写的没问题)  编译代码(遇到函数与类解释的方式不同,生成字节码)  执行(转换成机器码)

  Python 运行后,原目录下会生成 .pyc(Python 编译后生成的专有字节码文件) 可用工具反解。
  Python 执行时会优先找 .pyc 文件,当没有 .pyc 会先执行 py 生成字节码,如果 py 文件被修改过,与 .pyc 文件中的内容不符,Python 会重新编译生成 .pyc 并替换。

字符集与字符编码:

1.字符集:

字符是各种文字和符号的总称,包括各个国家文字、标点符号、图形符号、数字等。字符集是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同。 常见字符集有:ASCII字符集、ISO 8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。 计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。

2.编码(encoding):

 编码(encoding)与字符集不同。字符集只是字符的集合,不一定适合作网络传送、处理,有时须经编码(encode)后才能应用。 如Unicode可依不同需要以 UTF-8、UTF-16、UTF-32等方式编码。 字符编码就是以二进制的数字来对应字符集中的字符。

使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。

常用字符编码:

ASCII:

(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以勉强显示其他西欧语言。它是现今最通用的单字节编码系统(但是有被UniCode追上的迹象) ASCII 采用 7 位或 8 位 二进制数组合来表示 128 或 256 种可能出现的字符,在计算机没有大规模发展时,128位足以表示英文字符与数字,但后期计算机经过广泛发展,在世界的各个角落流行起来,采取传统的 8 位二进制数最多只能表示 256 种字符变化,对于纯英文来说足够,但是并不适于其它国家的语言,,已经不能满足其它国家对字符的表示需求。

Unicode:

  万国码,它至少采用 2byte 来表示字符,表示范围是世界上各个国家的字符,范围很大,比如,汉字“严”的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这就会出现两个严重的问题:

  如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0来填充,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:

  出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。  unicode在很长一段时间内无法推广,直到互联网的出现。

Unicode:

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,但只有 UTF-8 被广泛使用,注意:UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,它是一种变长的编码方式。它可以使用1~4个字节表示一个字符,根据不同的字符而变化字节长度,避免了 Unicode 中浪费磁盘空间的问题。

GBK:

专属用来表示中文的一种字符编码。

Python 编码:

python 2.x 默认采用 Unicode 编码格式,让人非常头疼的问题就是编码问题。  如果想让 Python 支持中文字符需要在文件顶部声明编码格式为:utf-8  
#-*- coding:utf-8 -*-
python 3.x 默认采用 UTF-8 编码格式,原生支持中文。

Python Day01

相关内容

    暂无相关文章

评论关闭