0、Python之.format()方法
format():格式化输出,是Python2.6新增的格式化字符串的方法,把传统的%替换为{}来实现格式化输出(%:格式化操作符),相对于老版的%格式方法,有很多的优点。
优点:
1.format()不需要理会数据类型的问题;在%方法中%s只能替代字符串类型。
2.单个参数可以多次输出,参数顺序可以不相同。
3.填充方式十分灵活,对齐方式十分强大。
4.官方推荐使用的方式
format()后面的内容,填入大括号{}中(其中{}花括号表示replacement字段),format()可以接受2种参数:位置参数、变量(关键字)参数,均传递到replacement字段。
按位置参数
1.参数按照位置的顺序填充到字符串中,第一个参数是0,然后是1,2,3.......
>>> '{0} love {1}.{2}'.format('I','Fishc','com') #前面的字符串调用format()方法 'I love Fishc.com'
>>> '{1} love {0}.{2}'.format('I','Fishc','com') #注意位置的替换 'Fishc love I.com' >>>
2.不输入数字,直接按照顺序来填充
>>> '{} love {}.{}'.format('I','Fishc','com') 'I love Fishc.com' >>>
>>> #需要输出{},可以用{{}},即{}对自己转义 >>> '{{{0} love {1}}}'.format('I','you') '{I love you}' >>>
>>> #一个位置参数可以使用2次 >>> '{{{1} love {0}.{1}}}'.format('fishc','I') '{I love fishc.I}' >>>
按关键字参数
>>> #按照关键字参数,format()中要具体写明参数对应的值 >>> '{a} love {b}.{c}'.format('I','Fishc','com') Traceback (most recent call last): File "<pyshell#8>", line 1, in <module> '{a} love {b}.{c}'.format('I','Fishc','com') KeyError: 'a' >>> '{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 >>>
一、基本字符串操作
字符串都是不可变的。如下所示的项或者分片赋值都是不合法的: >>> website = 'http://www.baidu.com' >>> website[-3:]='org' Traceback (most recent call last): File "<pyshell#125>", line 1, in <module> website[-3:]='org' TypeError: 'str' object does not support item assignment >>>
二、字符串格式化
表:字符串格式化转换类型
符号 说 明 %c 格式化字符及其ASCII码 %s 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大写) %f 格式化定点数,可指定小数点后的精度 %e 用科学计数法格式化定点数 %g 根据值的大小决定使用%f或者%e %G 根据值的大小决定使用%F或者%E 字符串的格式化使用的是:字符串格式化操作符%
转换说明符%s 、%d、%x等表示:需要插入转换值的位置。
转换方法:左操作数 % 右操作数
格式化操作符的右操作数可以是任意类型,右操作数是元组,元组的每一个元素都会被单独格式化
>>> '%s + %s =%s' % (4,5,4+5) '4 + 5 =9' >>>
>>> '%s love fishc' % 'I' 'I love fishc' >>>
>>> format = 'Hello,%s.%s is beautiful' >>> values = ('world','Flower') #用元组的形式 >>> format % values 'Hello,world.Flower is beautiful' >>>
基本的转换说明符
(1)%字符:标记转换说明符的开始。
(2)转换标志:-表示左对齐
+表示在转换值之前加上正号
‘ ’空格表示在正数之前保留空格
0表示在转换数若位数不够用0填充
(3)字段宽度:转换后的字符串指定出字段宽度
(4).(点)后跟精度值:如果转换的是实数,精度值就表示出现在小数点后的位数。
(一)简单转换
>>> '%s + %s ==%s' % (4,5,4+5) '4 + 5 ==9' >>> '%s + %s =%s' % (4,5,4+5) '4 + 5 =9' >>> 'price is :$%d' % 42 'price is :$42' >>> 'price is :%x' % 42 'price is :2a' >>> from math import pi >>> 'pi is:%f...' % pi 'pi is:3.141593...' >>> 'pi is:%.5f' % pi 'pi is:3.14159' >>> 'pi is:%i' % pi 'pi is:3'
(二)字段宽度跟精度
>>> from math import pi >>> 'pi is:%10f' % pi 'pi is: 3.141593' #字段宽10,不足前位补空位 >>> '%10.2f' % pi ' 3.14' #字段宽10,精度为2 >>> '%.2f' % pi '3.14' >>> '%.5s' % 'Google help' #精度为5 'Googl' >>>
(三)符号、对齐、用0填充
用0填充
在字段宽度和精度值之前还可以放置一个“标志”,该标志可以是0,加号,减号或者空格,0表示数字将会用0进行填充。
>>> 'pi is:%010.2f' % pi 'pi is:0000003.14' >>>
注意:在上述例子中的010中,开头的0并不意味着字段宽度说明符为八进制数,只是普通的Python数值。
减号(-)用来左对齐数值
>>> '%10.2f' % pi ' 3.14' >>> '%-10.2f' % pi '3.14 ' >>>
加号(+):不管是正数还是负数都标示出正负号
>>> print(('%+5d' % 3.14) + ' ' + ('%+5d' % -3.14)) +3 -3 #负号标示出来 >>>
“ ”空格在正数前面加上空格(正负数的对齐时:很有用)
>>> print(('% 5d' % 3.14) + ' ' + ('%5d' % -3.14)) 3 -3 >>>
三、字符串中最常用的方法
1.find()
解释:可以在一个较长的字符串中查找子串,返回子串所在位置的最左端索引(第一次出现的子串),如果没有找到则返回-1.
>>> 'I love Fishc.com'.find('com') 13 >>> title = 'I love fishc.com' >>> title.find('fishc') 7 >>> title.find('hello')#找不到返回-1 -1 >>>
注意:如果返回值是0,不是布尔型的0,而是在索引位置0找到了子串。例如:
>>> namestr = '$$$ Get Rich Now!$$$' >>> namestr.find('$$$') 0 >>>
find()添加起始点跟结束点参数
>>> namestr '$$$ Get Rich Now!$$$' >>> namestr.find('!$$',1)#只提供起始点 16 >>> namestr.find('!$$') 16 >>> namestr.find('Rich',0,7) #索引位置起始点0,结束点位置7之间没有找到子串 -1 >>>
2.join()
解释:用来连接序列中的元素,是字符串中很重要的方法,是split()方法的逆方法。
注意:需要被连接的序列元素都必须是字符串!!
>>> list1 = [1,3,4,6,7,9] >>> seq = '+' >>> seq.join(list1) Traceback (most recent call last): File "<pyshell#32>", line 1, in <module> seq.join(list1) TypeError: sequence item 0: expected str instance, int found >>> list2 = ['2','5','6','9'] >>> seq = '+' >>> seq.join(list2) '2+5+6+9' >>>
>>> dirs = '','user','bin','env' >>> '/'.join(dirs) '/user/bin/env' >>> print('C:'+'\'.join(dirs)) C:userinenv >>>
3.split()
解释:将字符串分割成序列,是join()的逆方法。
>>> 'This is a good idea!'.replace('is','ez') 'Thez ez a good idea!' >>> '1+2+3+4+5'.split('+') ['1', '2', '3', '4', '5']>>> 'I love Fishc.com'.split(' ') ['I', 'love', 'Fishc.com'] >>>
4.lower()
解释:返回字符串的小写字母版。
>>> title = 'I love Fishc.com' >>> title.lower() 'i love fishc.com' >>>
5.replace()
解释:返回某字符串的所有匹配项均被替换之后得到的字符串。
>>> 'This is a good idea!'.replace('is','ez') #可以理解为查找并替换 'Thez ez a good idea!' >>>
6.strip()
解释:(1)不加参数是除去字符串两侧的空格(不含字符串中间的空格)
(2)加参数,是除去两侧的需要去掉的字符
>>> ' I love Fishc.com '.strip()#不加参数 'I love Fishc.com' >>>
加参数,只会去除字符串两侧的字符,对字符串中间没有影响.
>>> '### I love ##Fishc.com ## hello ####'.strip('##')#加参数 ' I love ##Fishc.com ## hello ' >>>
课后习题:
1. 请问以下这行代码会打印什么内容?
>>> '{{{1}}}'.format('no print','print') #外层{}对中间层{}转义,输出{};中间的{1}对应的format()参数的索引位置是1 '{print}' >>> '{{1}}'.format('no print','print') #这个1被解释掉了 '{1}' >>>
2. 以下代码中,a, b, c是什么参数?
关键字参数
>>> "{a} love {b}.{c}".format(a="I", b="FishC", c="com") 'I love FishC.com' >>>
3. 以下代码中,{0}, {1}, {2}是什么参数?
位置参数
>>> "{0} love {1}.{2}".format("I", "FishC", "com") 'I love FishC.com' >>>
4. 如果想要显示Pi = 3.14,format前边的字符串应该怎么填写呢?
>>> "{0}{1:.2f}".format('Pi= ',3.1415) 'Pi= 3.14' >>>
动动手:
0. 编写一个进制转换程序,程序演示如下(提示,十进制转换二进制可以用bin()这个BIF):
q=True while q: num=input('请输入一个十进制的整数(输入Q结束程序):') if num !='Q': num=int(num) print(('十进制->十六进制: %d -> %x') % (num,num)) print(('十进制->八进制: %d -> %o') % (num,num)) print(('十进制->二进制: %d -> ') % num,bin(num)) else: q=False
演示结果:
请输入一个十进制的整数(输入Q结束程序):9 十进制->十六进制: 9 -> 0x9 十进制->八进制: 9 -> 0o11 十进制->二进制: 9 -> 0b1001 请输入一个十进制的整数(输入Q结束程序):