目錄:
一、format()
二、格式化操作符:%
三、Python的轉義字元及含義
四、課時15課後習題及答案
***************
一、format()
***************
格式化字串,就是按照統一的規格去輸出一個字串。如果規格不統一,就很有可能造成誤會,例如十六進位制的10跟十進位制的10完全是不同的概念(十六進位制的10等於十進位制16,二進位制10等於十進位制2),字串格式化。正式幫助我們糾正並規範這類問題而存在的。
format()方法接受位置引數和關鍵字引數(位置引數和關鍵字引數在函式章節有詳細的講解),二者均傳遞到一個叫作replacement欄位。而這個replacement欄位在字串內由大括號( { } )表示。
>>> "{0} love {1}.{2}".format("I","FishC","com") 'I love FishC.com'
仔細看,字串中的{0}、{1}和{2}應該跟位置有關,依此被format()的三個引數替換,那麼format()的三個引數就叫作位置引數。那什麼是關鍵字引數呢,再來看一個例子:
>>> "{a} love {b}.{c}".format(a="I",b="FishC",c="com") 'I love FishC.com'
{a}{b}和{c}就相當於三個標籤,format()將引數中等值的字串替換出去,這就是關鍵字引數啦。另外,也可以綜合位置引數和關鍵字引數一起使用:
>>> "{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
如果把大括號列印出來,你有辦法嗎?沒錯,這跟字串轉義字元有點像,只需要用一層大括號包起來即可(要列印轉義字元(\),只需要轉義字元轉義本身(\\)):
>>> "{{0}}".format("不列印") '{0}'
位置引數“不列印”沒有被輸出,這是因為{0}的特殊功能被外層的大括號( { } )剝奪,因此沒有欄位可以輸出。注意,這並不會產生錯誤哦。最後再來看另外一個例子:
>>> "{0}:{1:.2f}".format("圓周率",3.14159) '圓周率:3.14'
可以看到,位置引數{1}跟平常有些不同,後邊多了一個冒號。在替換域中,冒號表示格式化符號開始,“.2”的意思是四捨五入到保留兩位小數點,而f的意思是浮點數,所以按照格式化的要求列印除了3.14。
**************************
二、格式化操作符:%
**************************
剛才講的是字串的格式化方法,現在來談談字串所獨享的一個操作符:%,有人說,這不是求餘數的操作符嗎?是的,沒錯!當%左右均為數字的時候,那麼它表示求餘數的操作;但當它出現在字串中的時候,它表示的是格式化操作符。下表列舉了Python的格式化符號及含義。
符號 說明 %c 格式化字元及其 ASCII 碼 %s 格式化字串 %d 格式化整數 %o 格式化無符號八進位制數 %x 格式化無符號十六進位制數 %X 格式化無符號十六進位制數(大寫) %f 格式化浮點數字,可指定小數點後的精度 %e 用科學計數法格式化浮點數 %E 作用同 %e,用科學計數法格式化浮點數 %g 根據值的大小決定使用 %f 或 %e %G 作用同 %g,根據值的大小決定使用 %f 或者 %E
下面舉幾個例子供參考:
>>> '%c'%97 'a' >>> '%c%c%c%c%c'%(70,105,115,104,67) 'FishC' >>> '%d轉換為八進位制是:%o'%(123,123) '123轉換為八進位制是:173' >>> '%f用科學計數法表示為:%e'%(149500000,149500000) '149500000.000000用科學計數法表示為:1.495000e+08'
Python還提供了格式化操作符的輔助指令,如下表所示:
符號 說明 m.n m 是顯示的最小總寬度,n 是小數點後的位數 - 用於左對齊 + 在正數前面顯示加號(+) # 在八進位制數前面顯示 '0o',在十六進位制數前面顯示 '0x' 或 '0X' 0 顯示的數字前面填充 '0' 取代空格
同樣列舉幾個例子:
>>> '%5.1f'%27.658 ' 27.7' >>> '%.2e'%27.658 '2.77e+01' >>> '%10d'%5 ' 5' >>> '%-10d'%5 '5 ' >>> '%010d'%5 '0000000005' >>> '%#X'%100 '0X64'
**********************************
三、Python的轉義字元及含義
**********************************
Python的部分轉義字元已經使用一段時間,是時候來給它做個總結了,見下表:
符號 說明 \' 單引號 \" 雙引號 \a 發出系統響鈴聲 \b 退格符 \n 換行符 \t 橫向製表符(TAB) \v 縱向製表符 \r 回車符 \f 換頁符 \o 八進位制數代表的字元 \x 十六進位制數代表的字元 \0 表示一個空字元 \\ 反斜槓
*******************************
四、課時15課後習題及答案
*******************************
0. 根據說明填寫相應的字串格式化符號
符 號 說 明 % 格式化字元及其ASCII碼 % 格式化字串 % 格式化整數 % 格式化無符號八進位制數 % 格式化無符號十六進位制數 % 格式化無符號十六進位制數(大寫) % 格式化定點數,可指定小數點後的精度 % 用科學計數法格式化定點數 % 根據值的大小決定使用%f或者%e % 根據值的大小決定使用%F或者%E
1. 請問以下這行程式碼會列印什麼內容?
>>> "{{1}}".format("不列印", "列印")
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前邊的字串應該怎麼填寫呢?
''.format('Pi = ', 3.1415)
動動手:
0. 編寫一個進位制轉換程式,程式演示如下(提示,十進位制轉換二進位制可以用bin()這個BIF):
答案:
測試題答案:
0. 根據說明填寫相應的字串格式化符號
符 號 說 明 %c 格式化字元及其ASCII碼 %s 格式化字串 %d 格式化整數 %o 格式化無符號八進位制數 %x 格式化無符號十六進位制數 %X 格式化無符號十六進位制數(大寫) %f 格式化定點數,可指定小數點後的精度 %e 用科學計數法格式化定點數 %E 作用同%e,用科學計數法格式化定點數 %g 根據值的大小決定使用%f或者%e %G 作用同%g,根據值的大小決定使用%F或者%E
1. 請問以下這行程式碼會列印什麼內容?
>>> "{{1}}".format("不列印", "列印") '{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. 編寫一個進位制轉換程式
1 q = True 2 while q: 3 num = input('請輸入一個整數(輸入Q結束程式):') 4 if num != 'Q': 5 num = int(num) 6 print('十進位制 -> 十六進位制 : %d -> 0x%x' % (num, num)) 7 print('十進位制 -> 八進位制 : %d -> 0o%o' % (num, num)) 8 print('十進位制 -> 二進位制 : %d -> ' % num, bin(num)) 9 else: 10 q = False