Quick_Python_3
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,面向对象程序设计),类与对象可谓是它的生命。一起坚持学习吧!
推荐阅读