第十一天
0. 元组(tuple):戴上了枷锁的列表
Python的元组与列表类似,不同之处在于元组的元素不能修改。
元组使用小括号(),列表使用方括号[]。
"""孟德斯鸠:一切拥有权力的人都容易滥用权力。"""
1. 创建元组:
1.1 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。或者直接用逗号隔开即可。
逗号隔开的一组集合的数据默认就是创建元组类型。
>>> tuple1 = (1,2,3,4,5,6,7,8) >>> tuple1 (1, 2, 3, 4, 5, 6, 7, 8) >>> temp2 = 2,3,4 >>> temp2 (2, 3, 4) >>> type(temp2) <class 'tuple'>
但是元组的关键不是小括号(),而是逗号。
>>> temp = (1) >>> temp 1 >>> type(temp) <class 'int'> # 可以看到(1) 不是一个元组而是整数类型1.所以创建单个元素元组应该这样写: >>> temp = (1,) >>> type(temp) <class 'tuple'>
1.2 创建空元组:
>>> temp = () >>> type(temp) <class 'tuple'>
2. 元组元素的获取:
元组中元素的获取和列表基本一致,通过位置(下标)获取
>>> tuple1 = (1,2,3,4,5,6,7,8) >>> tuple1[1] 2
同样对列表适用的切片等方法也适用。
>>> tuple1[5:] (6, 7, 8) >>> tuple1[:5] (1, 2, 3, 4, 5) >>> tuple2 = tuple1[:] >>> tuple2 (1, 2, 3, 4, 5, 6, 7, 8)
3. 元组的修改:
元组是不可改变的类型。元组中的任何元素不可改变。
>>> tuple1 = (1,2,3,4,5,6,7,8) >>> tuple1[1]=3 Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> tuple1[1]=3 TypeError: 'tuple' object does not support item assignment # 会报错元组不可修改。
4. 元组的拼接:
元组的元素虽然不可以改变但是对整个元组来说还是可以进行拼接、重复等操作。
# 拼接 >>> temp = ('子鹿','黑夜','迷途','小布丁') >>> temp = temp[:2] + ('怡静',) + temp[2:] >>> temp ('子鹿', '黑夜', '怡静', '迷途', '小布丁') # 重复 >>> 8 * (8,) (8, 8, 8, 8, 8, 8, 8, 8) # (8)还是 int 整型 >>> 8 * (8) 64
5. 元组的删除:
>>> del tuple1 >>> tuple1 Traceback (most recent call last): File "<pyshell#14>", line 1, in <module> tuple1 NameError: name 'tuple1' is not defined
python 实际上是有回收机制的。有回收器。面向对象的高级语言一般都有回收机制。静态的数据,例如字符串,元组,固定分配的变量,内存没有标签贴向他的时候就会被自动回收。
当有多个标签贴向他的时候,每调用一次del 会减少一个标签,当没有标签指向的时候则会被回收释放掉。
6. 相关操作符:
实际上元组除了其中的元素不可改变但是列表适用的很多操作对元组也适用。
拼接操作符,重复操作符,关系操作符,逻辑操作符,成员操作符对元组都适用。
第十二天
字符串:各种奇葩的内置方法
0. 基本方法:
0.1 切片 : 字符串同样可以使用列表、元组的切片方法。
>>> str1 = 'I love fishc.com' >>> str1[:6] 'I love'
python 没有字符类型,认为字符是长度为1的字符串。
>>> str1[5] 'e'
0.2 字符串跟元组一样一旦定下来就不可以直接修改。但是也可以用拼接的方法得到新字符串。
>>> str1 = str1[:6] + ' 插入字符串' + str1[6:] >>> str1 'I love 插入字符串 fishc.com'
1. 字符串的方法及注释
capitalize() 把字符串的第一个字符改为大写。
>>> str2 = 'xiao xie'>>> str2.capitalize()'Xiao xie'
casefold() 把整个字符串的所有字符改为小写。
>>> str2 = 'DAXIExiaoxie'>>> str2.casefold()'daxiexiaoxie'
center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串。
>>> str2.center(40)' DAXIExiaoxie '
count(sub[, start[, end]]) 返回 sub 在字符串里边出现的次数,start 和 end 参数表示范围,可选。
>>> str2.count('xi')2
encode(encoding= 'utf-8', errors= 'strict') 以 encoding 指定的编码格式对字符串进行编码。
>>> str2.encode(encoding='UTF-8',errors='strict')# encoding -- 要使用的编码,如"UTF-8"。# errors -- 设置不同错误的处理方案。默认为 'strict',意为编码错误引起一个UnicodeError。 其他可能得值有 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。
endswith(sub[, start[, end]]) 检查字符串是否以 sub 子字符串结束,如果是返回 True,否则返回 False。start 和 end 参数表示范围,可选。
>>> str2'DAXIExiaoxie'>>> str2.endswith('xi')False>>> str2.endswith('xie')True
expandtabs([tabsize=8]) 把字符串中的 tab 符号(\t)转换为空格,如不指定参数,默认的空格数是 tabsize = 8。
>>> str3 = 'I\tlove\tFishC.com!'>>> str3.expandtabs()'I love FishC.com!'
find(sub[, start[, end]]) 检测 sub 是否包含在字符串中,如果有则返回索引值,否则返回 -1,start 和 end 参数表示范围,可选。
>>> str3.find('efc')-1>>> str3.find('com')13
index(sub[, start[, end]]) 跟 find 方法一样,不过如果 sub 不在 string 中会产生一个异常。
>>> str3 = 'I\tlove\tFishC.com!'>>> str3.index('com')13>>> str3.index('efc')Traceback(most recent call last) : File "<pyshell#2>", line 1, in <module> str3.index('efc')ValueError: substring not found
isalnum() 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False。
>>> str3 = 'zzz123456789'>>> str3.isalnum()True>>> str3 = '!123456789'>>> str3.isalnum()False
isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False。
>>> str3 = '!123456789'>>> str3.isalpha()False>>> str3 = 'zzzz'>>> str3.isalpha()True
isdecimal() 如果字符串只包含十进制数字则返回 True,否则返回 False。
>>> str3 = '1234'>>> str3.isdecimal()True>>> str3 = 'z1234'>>> str3.isdecimal()False
isdigit() 如果字符串只包含数字则返回 True,否则返回 False。
>>> str3 = '123456'>>> str3.isdigit()True>>> str3 = 'z123456'>>> str3.isdigit()False
islower() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是小写,则返回 True,否则返回 False。
>>> str4 = '小甲鱼'>>> str4.islower()False# 编码支持中文,当作字符串处理,不是小写,所以返回False >>> str5 = 'fishc'>>> str5.islower()True
isnumeric() 如果字符串中只包含数字字符,则返回 True,否则返回 False。
>>> str4 = '123456'>>> str4.isnumeric()True>>> str4 = 'z123456'>>> str4.isnumeric()False# 与isdigit()类似。但此方法是只针对unicode对象。# 注:定义一个字符串为Unicode,只需要在字符串前添加 'u' 前缀即可。
isspace() 如果字符串中只包含空格,则返回 True,否则返回 False。
>>> str4 = ' '>>> str4.isspace()True>>> str4 = '123'>>> str4.isspace()False
istitle() 如果字符串是标题化(所有的单词都是以大写开始,其余字母均小写),则返回 True,否则返回 False。
>>> str5 = 'FishC'>>> str5.istitle()False>>> str5 = 'Fishc'>>> str5.istitle()True
isupper() 如果字符串中至少包含一个区分大小写的字符,并且这些字符都是大写,则返回 True,否则返回 False。
>>> str5 = 'FISHC'>>> str5.isupper()True>>> str5 = 'FISHc'>>> str5.isupper()False
join(sub) 以字符串作为分隔符,插入到 sub 中所有的字符之间。
>>> str5 = 'Fishc'>>> str5.join('12345')'1Fishc2Fishc3Fishc4Fishc5'
ljust(width) 返回一个左对齐的字符串,并使用空格填充至长度为 width 的新字符串。
>>> str5 = 'Fishc'>>> str5.ljust(20)'Fishc '
lower() 转换字符串中所有大写字符为小写。
>>> str5.lower()'fishc'
lstrip() 去掉字符串左边的所有空格。
>>> str6 = ' i love you.'>>> str6.lstrip()'i love you.'
partition(sub) 找到子字符串 sub,把字符串分成一个 3 元组(pre_sub, sub, fol_sub),如果字符串中不包含 sub 则返回('原字符串', '', '')。
>>> str6 = 'i love fishc'>>> str6.partition('ov')('i l', 'ov', 'e fishc')
replace(old, new[, count]) 把字符串中的 old 子字符串替换成 new 子字符串,如果 count 指定,则替换不超过 count 次。
>>> str6.replace('fishc','FishC')'i love FishC'
rfind(sub[, start[, end]]) 类似于 find() 方法,不过是从右边开始查找。
str3 = 'I\tlove\tFishC.com!'>>> str3.rfind('efc')-1>>> str3.rfind('com')13
rindex(sub[, start[, end]]) 类似于 index() 方法,不过是从右边开始。
>>> str3 = 'I\tlove\tFishC.com!'>>> str3.rindex('com')13>>> str3.rindex('efc')Traceback(most recent call last) : File "<pyshell#40>", line 1, in <module> str3.rindex('efc')ValueError: substring not found
rjust(width) 返回一个右对齐的字符串,并使用空格填充至长度为 width 的新字符串。
>>> str5 = 'Fishc'>>> str5.rjust(20)' Fishc'
rpartition(sub) 类似于 partition() 方法,不过是从右边开始查找。
>>> str6 = 'i love fishc'>>> str6.rpartition('ov')('i l', 'ov', 'e fishc')
rstrip() 删除字符串末尾的空格。
>>> str7 = ' ssssssssaaaassss '>>> str7.rstrip()' ssssssssaaaassss'>>> str7 = 'ssssssssaaaassss'>>> str7.rstrip('s')'ssssssssaaaa'
split(sep= None, maxsplit= -1) 不带参数默认是以空格为分隔符切片字符串,如果 maxsplit 参数有设置,则仅分隔 maxsplit 个子字符串,返回切片后的子字符串拼接的列表。
>>> str6'i love fishc'>>> str6.split()['i', 'love', 'fishc']>>> str6.split('i')['', ' love f', 'shc']
splitlines(([keepends])) 在输出结果里是否去掉换行符,默认为 False,不包含换行符;如果为 True,则保留换行符。
>>> str3 = 'I\nlove\nFishC.com!'>>> str3.splitlines()['I', 'love', 'FishC.com!']>>> str3.splitlines(True)['I\n', 'love\n', 'FishC.com!']
startswith(prefix[, start[, end]]) 检查字符串是否以 prefix 开头,是则返回 True,否则返回 False。start 和 end 参数可以指定范围检查,可选。
>>> str2 = 'DAXIExiaoxie'>>> str2.startswith('DA')True>>> str2.startswith('A')False
strip([chars]) 删除字符串前边和后边所有的空格,chars 参数可以定制删除的字符,可选。
>>> str7 = ' ssssssssaaaassss '>>> str7.strip()'ssssssssaaaassss'>>> str7 = 'ssssssssaaaassss'>> str7.strip('s')'aaaa'
swapcase() 翻转字符串中的大小写。
>>> str5 = 'Fishc'>>> str5.swapcase()'fISHC'
title() 返回标题化(所有的单词都是以大写开始,其余字母均小写)的字符串。
>>> str5 = 'FishC'>>> str5.title()'Fishc'
translate(table) 根据 table 的规则(可以由 str.maketrans('a', 'b') 定制)转换字符串中的字符。
>>> str7 = 'ssssssssaaaassss'>>> str7.translate(str.maketrans('s','b'))'bbbbbbbbaaaabbbb'>>> str.maketrans('s','b'){115: 98}# ASCII码 s的ASCII码是115 b的ASCII码是98
upper() 转换字符串中的所有小写字符为大写。
>>> str7 = 'ssssssssaaaassss'>>> str7.upper()'SSSSSSSSAAAASSSS'
zfill(width) 返回长度为 width 的字符串,原字符串右对齐,前边用 0 填充。
>>> str5 = 'Fishc'>>> str5.zfill(20)'000000000000000Fishc'
第十三天
字符串:格式化
0. 格式化字符串就是按照统一的规格输出字符串.
就比如 16 进制的 10(16) 和 10 进制的 10(10) 和 2 进制的 10(2)是完全不同的概念。
字符串的格式化就是帮助我们纠正并规范这类可能出现的问题。
1. format方法接收位置参数或者关键字参数(二者都传递到replacement字段这个字段在字符串中用花括号表示{})
位置参数:
>>> "{0} love {1}.{2}".format("I","FishC","com") 'I love FishC.com' :
关键字参数错误示例:
>>> "{a} love {b}.{c}".format("I","FishC","com") Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> "{a} love {b}.{c}".format("I","FishC","com") KeyError: 'a' "{a} love {b}.{c}".format("I","FishC","com")
关键字参数:
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com") 'I love FishC.com'
位置参数和关键字参数混用:
>>> "{0} love {b}.{c}".format("I",b="FishC",c="com") 'I love FishC.com'
注:位置参数和关键字参数混用时位置参数必须在关键字参数前。
>>> "{a} love {b}.{0}".format(a="I",b="FishC","com") SyntaxError: positional argument follows keyword argument
注2:打印{{0}}时{0}被解释掉了。不作为位置参数处理。
>>> "{{0}}".format('不打印') '{0}'
注3:在替换域中冒号(:)表示格式化符号的开始。后面接的就是格式化符号。
>>> '{0:.1f}{1}'.format(27.658,'GB') '27.7GB' # .1表示四舍五入保留一位小数点。f的意思是打印定点数(27.658)。定点数与浮点数类似。
2. % 在遇到字符串的时候表示格式化操作符不再是求余操作符
字符串格式化符号含义
符号 说明
%c 格式化字符及其ASCII码
>>> '%c' % 97'a'# ASCII码中97=a 。
%s 格式化字符串
>>> '%s' % 'I love FishC.com''I love FishC.com'>>> '%c %c %c' %(97,98,99)'a b c'# 传递多个参数的时候需要用元组。
%d 格式化整数
>>> '%d + %d = %d' %(4,5,4+5)'4 + 5 = 9'
%o 格式化无符号八进制数
>>> '%o' %10'12'
%x 格式化无符号十六进制数
>>> '%x' %10'a'
%X 格式化无符号十六进制数(大写)
>>> '%X' %10'A'
%f 格式化定点数,可指定小数点后的精度
>>> '%f'% 27.658'27.658000'# 默认六位小数
%e 用科学计数法格式化定点数
>>> '%e'% 27.658'2.765800e+01'
%E 作用同%e , 用科学计数法格式化定点数
>>> '%E'% 27.658'2.765800E+01'
%g 根据值的大小决定使用%f或者%e
>>> '%g'% 27.658'27.658'
%G 作用同%g,根据值的大小决定使用 %f 或者 %e
>>> '%G'% 27.658'27.658'
格式化操作符辅助命令
符号 说明
m.n m 是显示的最小总宽度,n 是小数点后的位数
>>> '%5.1f' %27658'27658.0'>>> '%.2e' % 27.658'2.77e+01'>>> '%5.1f' % 27.658' 27.7'>>> '%10d' % 5' 5'
- 用于左对齐
>>> '%-10d' % 5'5 '
+ 在正数前面显示加号(+)
>>> '%+d' % 5'+5'>>> '%+d' % -5'-5'
# 在八进制数前面显示 '0o',在十六进制数前面显示 '0x' 或 '0X'
>>> '%#o' % 10'0o12'>>> '%#X' % 108'0X6C'>>> '%#x' % 108'0x6c'>>> '%#d' % 10'10'
0 显示的数字前面填充 '0' 取代空格
>>> '%010d' % 5'0000000005'>>> '%-010d' % 5'5 '# 这时候负号(-)左对齐并不填充0防止反转后数值增大。
Python 的转义字符及其含义
符号 说明
\' 单引号
\" 双引号
\a 发出系统响铃声
\b 退格符
\n 换行符
\t 横向制表符(TAB)
\v 纵向制表符
\r 回车符
\f 换页符
\o 八进制数代表的字符
\x 十六进制数代表的字符
\0 表示一个空字符
\\ 反斜杠