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) + '\n' + ('%+5d' % -3.14)) +3 -3 #負號標示出來 >>>
“ ”空格在正數前面加上空格(正負數的對齊時:很有用)
>>> print(('% 5d' % 3.14) + '\n' + ('%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:\user\bin\env >>>
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結束程序):