为什么变量名在Python里可以用中文?因为UTF8字符编码

1,185 阅读4分钟

这是我参与更文挑战的第16天,活动详情查看: 更文挑战

中文作为变量名

>>>标题 = '在Python中使用中文玩一玩编程'
>>> 姓名列表 = ['张三', '李四', '王五', '赵六', '钱七']
>>> for 姓名 in 姓名列表:
...     print(姓名, end='>>>')
... 输出结果...
张三>>>李四>>>王五>>>赵六>>>钱七>>>

在每本Python书籍中,Python中变量的命名要遵循以下规则:

  1. 可以使用数字、字母、下划线
  2. 不能以数字开头为什么可以用中文作为变量没报错?答案就是字符编码因为Python3解释器的默认编码已经从Python2的ASCII编码改为UTF-8编码,UTF-8编码支持任何Unicode字符串的写入了,当然里面就包含了中文。
    对上面说的东西没有概念??下面就了解一下目前字符编码表的全家福吧。

字符编码表

首先了解一下字符编码和字符编码表的概念。

字符编码

我们知道,任何数据最后在计算机里的实现都是二进制010101的形式存储,那么我们看到的字符也是如此。伟大的计算机先驱为了在图形界面上显示我们的字符,约定使用一张表,这张表就是字符编码表:表上每个具体的数字(就是我们说的字符编码)对应一个具体的字符,当计算机接收到某个数字(字符编码)就在图形界面上显示对应的字符。例如下表的十进制65就表示字符A。那么,我们的计算机就可以根据这张表去根据用户提供的具体编码查询到具体的字符,进而显示在我们的面前。

字符编码字符
十进制的65A
十进制的66B

字符编码表

一张记录字符编码和对应字符的表,也就是记录一个数字对应某个字符的表

常用字符编码表

char.png

ASCII

ASCII是后面所有字符编码表的老祖宗。因为电脑首先在美国诞生,所以这张表符合美国国情的,它主要包含大小写字母数字以及一些特殊字符,一个字节就可以搞定。Python2使用的默认编码就是ASCII,所以Python2不支持中文,更本质的说,是ASCII没有对应的中文字符编码

ascii.jpeg

GB2312 GBK

电脑漂洋过海来到了中国,竟不能使用中文??怎么可以!!我们就在ASCII的基础上进行扩展,添加了中文的字符,最后形成了GBK,两个字节表示一个中文汉字。

Unicode

但是每个国家都各自拥有一张字符表,交流的时候是不是需要准备好所有国家的字符编码表进行对应解码?这时候,国际标谁化组织为了统一编码:提出了标准编码准 则:Unicode一统天下 。Unicode是用两个字节来表示为一个字符,它总共可以组合出65535不同的字符,这足以覆盖世界上所有符号(包括甲骨文)

UTF-8

但按照Uicode的标准,原来的字母和数字本来一个字节可以搞定的事,需要两个字符来存放,本来1块钱可以解决的事,却要2块钱,亏啊。 所以UTF-8出来了,它是可变长度的编码表,英文字母数字还是一个字节搞定,其他字符就三个或四个字节表示一个字符。 中文在UTF-8中是以3个字节存储一个汉字的。 所以在网络传输中,如果全部是中文的话,使用GBK还会更节省空间。

Python3支持中文

因为Python3解释器的默认编码使用的是UTF-8,自然包括世界上所有的字符,自然可以在Python3中使用中文进行定义变量了。

因为在编程中,变量定义我们还是遵守文章开头提到的变量定义的原则。首先,中英文切换就够累的了,然后,中文进行变量定义还是很突兀的。其他母语的国家使用当地母语进行变量命名也有利于梳理逻辑的。