1 Python中Unicode字符串
1.1 ASCII编码
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是65,小写字母 z 的编码是122。
1.2 Unicode编码来源
对于ASCII编码,如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode通常用两个字节(16比特)表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
1.3 Python对Unicode编码的支持
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的,其中utf-8是unicode编码方式的一种实现方式。
Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,比如输出:中文
print u'中文'
注意: 不加 u ,中文就不能正常显示。
Unicode字符串除了多了一个 u 之外,与普通字符串没啥区别,转义字符和多行表示法仍然有效:
print (u'中文\n日文\n韩文')
输出:
中文
日文
韩文
例一:
print (r'''静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。''')
输出:
静夜思
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
2 Python中整数和浮点数
1)Python支持对整数和浮点数直接进行四则混合运算,运算规则和数学上的四则运算规则完全一致
print (7.5 / 8 + 2.1)#3.0375
2)使用括号可以提升优先级,这和数学运算完全一致,注意只能使用小括号,但是括号可以嵌套很多层
3)和数学运算不同的地方是,Python的整数运算结果仍然是整数,浮点数运算结果仍然是浮点数
Python2版本中Python的整数除法,即使除不尽,结果仍然是整数,余数直接被扔掉。比如11 / 4 # ==> 2 需要在11后面加上.0使其变成浮点数,但是Python3很好解决了这个问题print (11 / 4)==> 2.75
3 Python的布尔类型
我们已经了解了Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算:
1)与运算:只有两个布尔值都为 True 时,计算结果才为 True。
True and True # ==> True
True and False # ==> False
False and True # ==> False
False and False # ==> False
2)或运算:只要有一个布尔值为 True,计算结果就是 True。
True or True # ==> True
True or False # ==> True
False or True # ==> True
False or False # ==> False
3)非运算:把True变为False,或者把False变为True:
not True # ==> False
not False # ==> True
布尔运算在计算机中用来做条件判断,根据计算结果为True或者False,计算机可以自动执行不同的后续代码。
在Python中,布尔类型还可以与其他数据类型做 and、or和not运算,例如:
a = True
print (a and 'a=T' or 'a=F')
因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True。
true and x;结果返回x,若x为true,x and y返回x。
4)短路运算:
1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
例如:
#-*- coding:utf-8 -*-
a = 'python' #true
print ('hello,', a or 'world')#a为true,不再向后计算
b = '' #false
print ('hello,', b or 'world')#b为false,返回给'world'
4 Python之list
4.1 创建list
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
比如,列出班里所有同学的名字,就可以用一个list表示:
['Michael', 'Bob', 'Tracy']
['Michael', 'Bob', 'Tracy']
list是数学意义上的有序集合,也就是说,list中的元素是按照顺序排列的。
构造list非常简单,按照上面的代码,直接用 [ ] 把list的所有元素都括起来,就是一个list对象。通常,我们会把list赋值给一个变量,这样,就可以通过变量来引用list:
#-*- coding:utf-8 -*-
a = ['dadaad','dadasdsa',123,'中国']
print (a)#['dadaad', 'dadasdsa', 123, '中国']
4.2 Python按照索引访问list
由于list是一个有序集合,所以,我们可以用一个list按分数从高到低表示出班里的3个同学,那我们如何从list中获取指定第 N 名的同学呢?方法是通过索引来获取list中的指定元素。
需要特别注意的是,索引从 0 开始,也就是说,第一个元素的索引是0,第二个元素的索引是1,以此类推。因此,要打印第一名同学的名字,用 L[0]:
#-*- coding:utf-8 -*-
L = ['adam', 95.5, 'lisa', 85, 'bart', 59]
print (L)#['adam', 95.5, 'lisa', 85, 'bart', 59]
print (L[0])#adam
print (L[1])#95.5
当超出索引范围时会报错:print (L[6])
IndexError: list index out of range
4.3 Python之倒序访问list
我们还是用一个list按分数从高到低表示出班里的3个同学:
L = ['Adam', 'Lisa', 'Bart']
这时,老师说,请分数最低的同学站出来。
要写代码完成这个任务,我们可以先数一数这个 list,发现它包含3个元素,因此,最后一个元素的索引是2:
print (L[2])
Bart
有没有更简单的方法?
有!
Bart同学是最后一名,俗称倒数第一,所以,我们可以用 -1 这个索引来表示最后一个元素:
print (L[-1])
Bart
Bart同学表示躺枪。
类似的,倒数第二用 -2 表示,倒数第三用 -3 表示,倒数第四用 -4 表示:
print (L[-2])
Lisa
print (L[-3])
Adam
print (L[-4])
Traceback (most recent call last):
File "
IndexError: list index out of range
L[-4] 报错了,因为倒数第四不存在,一共只有3个元素。
例如:
#-*- coding:utf-8 -*-
L = L = [95.5, 85, 59]
print (L)
print (L[-1])
print (L[-2])
print (L[-3])
print (L[-4])
结果print (L[-4])打印错误
Traceback (most recent call last):
File "D:\Java\workspace\Testpython\hello.py", line 7, in
print (L[-4])
IndexError: list index out of range
[95.5, 85, 59]
59
85
95.5
所以使用倒序索引时,也要注意不要越界。