1.编码 ASCII编码是1个字节,而Unicode编码通常是2个字节,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。 ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。 由于Python的字符串类型是str ,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str 变为以字节为单位的bytes 。 x = b'ABC' 要把bytes 变为str ,就需要用decode() 方法: 如果bytes 中只有一小部分无效的字节,可以传入errors='ignore' 忽略错误的字节: >>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
'中' #!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释; 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。 申明了UTF-8编码并不意味着你的.py 文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码: % 运算符就是用来格式化字符串的。在字符串内部,%s 表示用字符串替换,%d 表示用整数替换,有几个%? 占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%? ,括号可以省略。 常见的占位符有:
占位符 | 替换内容 |
---|
%d | 整数 | %f | 浮点数 | %s | 字符串 | %x | 十六进制整数 |
2.list和tuple Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。 用索引来访问list中每一个位置的元素,记得索引是从0 开始的:最后一个元素的索引是len(classmates) - 1 。 要取最后一个元素,除了计算索引位置外,还可以用-1 做索引,直接获取最后一个元素: >>> classmates[-1] 以此类推,可以获取倒数第2个、倒数第3个: >>> classmates[-2] >>> classmates[-3] >>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']
要拿到'php' 可以写p[1] 或者s[2][1] ,因此s 可以看成是一个二维数组 list是一个可变的有序表,所以,可以往list中追加元素到末尾: >>> classmates.append('Adam') 也可以把元素插入到指定的位置,比如索引号为1 的位置: >>> classmates.insert(1, 'Jack') 要删除list末尾的元素,用pop() 方法: >>> classmates.pop() 要删除指定位置的元素,用pop(i) 方法,其中i 是索引位置: >>> classmates.pop(1) 要把某个元素替换成别的元素,可以直接赋值给对应的索引位置: >>> classmates[1] = 'Sarah' 如果一个list中一个元素也没有,就是一个空的list,它的长度为0: list里面的元素的数据类型也可以不同 另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0] ,classmates[-1] ,但不能赋值成另外的元素。 tuple的陷阱:当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来 >>> t = (1)
>>> t
1
定义的不是tuple,是1 这个数!这是因为括号() 既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1 。 所以,只有1个元素的tuple定义时必须加一个逗号, ,来消除歧义: >>> t = (1,)
>>> t
(1,)
Python在显示只有1个元素的tuple时,也会加一个逗号, ,以免你误解成数学计算意义上的括号。 |