欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Quick_Python_3

程序员文章站 2022-05-04 18:08:30
...

Quick_Python_3

Markdown By 云天

本节课程的知识是一个过渡,比较轻松,我将为你讲授字符串编码方面的一些知识。

先讲解字符串:

About str

sentence_1 = 'I get 90 points in the exam.'
sentence_2 = 'How about you?'
print(sentence_1 + ' ' + sentence_2)

I get 90 points in the exam. How about you?

Python里的字符串和C里的字符串基本没有什么区别,对于字符串,最常用的一种操作可能就是拼接了。固然,用“+”可以,但是之前也说过,学会运用函数可以使代码简洁,可读性强。

‘➕’ works welll. However, if our program is complexible, we need to find a way which is more concise.

Str.format()

阅读下面三个代码块,尝试对比理解:

# By default(no parameter), operate in turn 
"{} can be {}".format("strings", "interpolated")

‘strings can be interpolated’

# Parameter can be sent as well, you can get the same output as above
"{0} can be {0}".format("strings", "interpolated")

‘strings can be strings’

"{0} be nimble, {0} be quick, {0} jump over the {1}".format("Jack", "candle stick")

‘Jack be nimble, Jack be quick, Jack jump over the candle stick’

Get到它们的工作原理了吗?在字符串要填入的位置,我们用花括号{ }为其预留位置。而后,我们传入参数,使其对应到相应位置。这种对应有两种形式:

1—> 花括号里为空,则传入的参数按次序依次填入预留位置;

2—> 可以将括号里的参数理解成元组中的元素,下标分别为0,1,2,···。需要往预留位置中填入什么,便在花括号中赋予相应的下标。

注意】如果采用方法1,记得传入的参数数量要与预留位置数目一致,否则程序会出错!

有时,我们还想使我们程序的可读性进一步增强。这时,不妨采用如下代码块提供的方式。虽然写起来繁琐了一些,但一目了然知道程序的用意。

# program readable
"{name} wants to eat {food}".format(name="Bob", food="lasagna") 

‘Bob wants to eat lasagna’

Encode and Decode

ASCII → GB2312/GBK → Unicode → UTF-8

上面便是编码方式发展史中的四个重要节点。

起初,计算机是美国人发明的,因此最早只有约127个字符被编码到计算机里,包括大小写英文字母、数字和一些其他符号。这样的话,一个字节8位二进制数便可以编码所有的这些信息,如00000000。这便是ASCII编码工作的原理。

然而,后来计算机在中国大范围普及,汉字文化博大精深,一个字节就连常用的几千个汉字也编码不完。于是中国另辟蹊径,设计了GB2312编码解决了自己的问题。GB2312经过一些优化后,便是GBK编码。但是,看到中国这么做,韩国,日本等国家也纷纷推出了自己的标准。这样一来,众多的编码机制使得计算机世界一片混乱,一种兼容的,优化的编码方式亟待出现。

Unicode应运而生。Unicode使用两个字节表示一个字符,这样便很好地解决了中日韩等国家的问题。但对于英文国家来说,比如要用Unicode编码字母A,便是00000000 01000001,在前面补了8个0。这样一来,要比ASCII码多处一倍的存储空间,同时传输时也存在高达50%的冗余信息

于是,一种**“可变长编码”出现了。这就是我们的UTF-8编码**。值得一提的是,ASCII可以看作是UTF-8码的一个子集,因此许多之前采用ASCII编码的软件在UTF-8编码环境下依然可以正常工作,这样当然非常好。

编码为encode,解码为decode,传入的参数便是你选择的编码方式,如下例程:

name = '云天'.encode('utf-8')
# print(name.decode('gbk'))
print(name.decode('utf-8'))

云天

很简单,不是吗?唯一要注意的,便是:对于同一个对象,编码和解码的方式必须是一致的,否则程序会出错!

# bonus scene !

cong = b'\xce\xd2\xc3\xc7\xd7\xf6\xb5\xbd\xc0\xb2\xa3\xa1\xc8\xf6\xbb\xa8\xa3\xa1'
# GBK only
print(cong.decode('gbk'))

我们做到啦!撒花!

我们的第四课结束啦,Quick_Python_3 !

正如前面所说,这是相对轻松的一课。我主要为你讲解关于字符串与编码的一些知识,希望你有所收获。

接下来的一课,我将会讲解非常重要的一部分内容,函数与类。函数之前我们也有所接触,而对于一门OOP语言来说(Object Oriented Programming,面向对象程序设计),类与对象可谓是它的生命。一起坚持学习吧!

相关标签: Python 教程

推荐阅读