首先Python是一种语言,因此根据其实现的不同,有Cpython, Jython, IronPython, Pypy等。
Python执行流程
$ python /home/hello.py 当在终端上执行py文件,流程图如下:
字符集
- ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
- Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,注:此处说的的是最少2个字节,可能更多。
- UTF-8是对Unicode编码的压缩和优化,目前使用的最广泛,是一种可变长字符编码,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。
内存读写信息是以byte为单位.
编码和解码(encode==编码,decode==解码)
为什么要编码和解码?
答案是:便于存储和传输。因为计算机底层只能识别0和1的二进制数据,encode就是把逻辑上的字符变成二进制数据,以便存储和传输,使用decode把二进制数据解码成逻辑的字符便于用户理解和操作。至于编码前和解码后的字符是怎么存储的,是Python的内部实现,只有 Python 自己需要操心,用户不用管,就像你不用管整数在 Python 内存里长什么样一样,但是你把整数存起来或者传输到网络上时就得考虑,是转成十进制字符串表示呢,还是转成32位无符号小端序表示呢,还是64位有符号网络序表示呢……
python 2.x 默认编码(ASCII)
在Python2中默认是ASCII编码,所以不支持中文,如果要支持中文就必须声明为unicode字符串,即在字符串前面加个u。
>>> str1 = 'my name is Ray' # ascii字符串 >>> str2 = u'我的名字是Ray' # unicode字符串 >>> >>> type(str1) <type 'str'> >>> type(str2) <type 'unicode'>