Python .format()函數使用方法詳解

format函數的調用

format函數可以被直接調用或在print函數中以占位符實現格式化調用。
在**2.6**版本前,占位符仍和其他語言一樣使用%(比如C中)。但在其後的版本,format函數的占位符更改為{}(花括號)。

優化的目的目前總結出瞭4個:

1.花括號封閉可以實現更多格式化的實現,更強大的功能

2.使代碼具有更強的可讀性。

3.單個參數可以多次輸出,參數順序可以不相同

4.不需要理會數據類型的問題,在%方法中%s隻能替代字符串類型

好瞭,進入正文,對於format函數的使用將分為兩部分。

1.format函數及其占位符的調用格式

2.占位符格式和參數設定

ps:在介紹的時候各個內容會有小小的穿插,其實是為瞭更加便於理解~

format函數及其占位符的調用格式

format函數可以直接被調用,比如在shell中直接調用

例1

>>>'{} {}'.format('hello','world')       #占位符不指定順序
'hello world'
>>>'{0} {1}'.format('hello','world')       #占位符制定順序
'hello world'
>>>'{1} {0}'.format('hello','world')       #換一下順序試試
'world hello'
 

我們更常用的方式是放入print()函數中進行格式化輸出

例2

print('{}獲得瞭S8冠軍'.format('IG')
#結果:
#IG獲得瞭S8冠軍

占位符以及參數設定

在第一部分中,簡單地介紹瞭兩種調用format函數的方式。可以很清晰地發現,在占位符中也可以輸入一些參數,對格式化輸出的參數進行設定,下面就詳細的介紹占位符中各項參數的順序和設置。

占位符中的各項參數格式如下所示

例3(偽代碼)

'{position/key:fill,align,sign,width,precision,type}'.format(...)

position/key

position/key指定瞭占位符處從format函數的參數中調用哪個值,position很好理解,比如上面例1中介紹的後兩種調用,就指定瞭format中兩個參數hello和world在占位符中調用的順序,註意這個順序是按照數組排序中從‘0’開始計算的。 當然,你也可以使用鍵值對進行操作。比如下面的例4:

例4

print(
    'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(S8='IG',S9='FPX'))
#結果:the championship of the S8 is IG, and for S9, it'FPX.

有寫小夥伴可能要問瞭,鍵值對(字典)的使用在這裡有什麼好處嗎?感覺還不如填個數字來的快捷啊?

再來看下面這一段代碼:

例5:

dic={'S8':'IG','S9':'FPX'}
print(
    'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(**dic))
#結果:the championship of the S8 is IG, and for S9, it'FPX.

在例5中,有些需要特別說明的地方,首先如果你要在format的括號裡調用字典,記得在字典名前面加**,也就是字典的函數調用方法哦!從例5中應該能發現瞭,我們不需要在format中專門把字典列出來,而是可以調用以前定義過的字典,這就使得其具備瞭重復調用的優點。想象一下這一點會有什麼不同,這是%方法做不到的哦。

你也可以用數組的形式填充,如例6所示:

例6:

names=['hilary','vergil','nero']
places=['chengdu','shijiazhuang','tokyo']
print(
    'Hi, {names[0]}. I am {names[1]} and this is {names[2]}.'.format(names=names)
    #Hi, hilary. I am vergil and this is nero.

第一個位置的參數,也是冒號前唯一的參數相信大傢就搞明白啦。

下面的參數都是並列的,我們一個一個說明。首先要講清楚這些參數如何並列或分隔。

那就是無需分隔,沒錯,下面的這些參數,你需要定義哪些就按照順序寫下就行,不用加什麼逗號或者空格分開,你可能會想,這不容易產生歧義嗎?我學習的時候也想過這個問題,事實是開發者編輯函數邏輯時就吧這些參數的設定值用不會產生任何歧義的符號或數字組合起來瞭,這一點當你使用時也會發現。

fill參數

fill參數用於指定填充符,默認值為空格,實際經驗是,很少有場景會用到這個參數,除非是按照國際通用的三位一個逗號分隔數字等場景。

例7:

>>> print('{:,}'.format(12345678))
12,345,678

align參數

align參數用於格式化文本的對齊方式,當你填充瞭寬度的時候,這個參數的作用是很大的,當然,在一句話中無縫的插入一個格式化文本的話,這個參數的設置就不大有意義瞭。

> < ^
右對齊 左對齊 居中對齊

例8:

在shell中運行如下代碼(代碼中數字三十表示寬度,目的是為瞭拉大總體寬度顯示出對齊的效果,後文會提到寬度的使用方法)

>>> print('{:<30}'.format('pos'))
pos
>>> print('{:>30}'.format('pos'))
                           pos
>>> print('{:^30}'.format('pos'))
             pos

sign參數

sign參數用於指定是否保留正負號,這個針對format中數字起作用。

+ SPACE
保留正負號 僅保留負號 正數留空,負數保留負號

例9:

>>> print('{0:+} {0:-} {0: }'.format(123))
+123 123  123
>>> print('{0:+} {0:-} {0: }'.format(-123))
-123 -123 -123

ps:註意第一行代碼運行結果中最後一個保留瞭一個空格哦

width參數

width參數控制輸出的長度,經過我的測試,該長度為最小長度,即當設定的width參數小於format中調用的值時,不生效;而當設定值大時,會用空格(默認)或零進行填補,如果想要用0進行填補,那麼需要在width前添加0,width參數的使用如例10所示。在例8中展示對齊參數時也使用瞭寬度參數,可以看出對齊是對我們的填補方式存在影響,其具體影響也在例10中給出。

例10:

print('{0:12} {0:05} {0:2}'.format(123)) #依次為12位寬空格填補、5位寬0填補、2位寬
#結果:
#         123 00123 123
print('{0:<012},{0:>012},{0:^012} '.format(123))
#結果:
#123000000000,000000000123,000012300000 
print('{0:^012},{1:^012},{0:^011},{1:^011} '.format(123,1234))
#結果:
#000012300000,000012340000,00001230000,00012340000

可以看出空格的填補同樣以對齊的區別顯示出來,但是0的填補卻往往改變瞭我們數字的表示,使用時要註意。另一個要註意的是當你的總寬度和數據的有效寬度的奇偶性不同時,居中對齊的方式會有不同,這就是例10中第三行代碼希望表達的意思。可以看出,當奇偶次出現不同時,總是偏向左一位對齊。

precision參數

和%方法中一樣,如%.3f表示保留小數點三位小數,用【.保留有效數字位數(f)】表示數據的精確度,如果添加f,則表明保留的為小數點後位數,如果不加,則表示保留的是有效數字位數。例11很好的展示瞭這種區別。

例11:

print('{0:.2f},{0:.7f},{0:.2},{0:.2%} '.format(123.123456789))
#結果:
#123.12,123.1234568,1.2e+02,12312.35% 

其實小夥伴們應該註意到瞭,這裡的f,%其實都算是precision參數後的type參數控制的內容——數據類型。因此,我們對精度簡單介紹,而將precision-type參數的聯合參數具體介紹,因為二者具有很強的關聯。

precision-type參數

首先介紹所有的type參數,如下表所示:

type參數 含義
默認 十進制整數 123
f 浮點數 123.123
% 百分比格式 12312.3%
e 指數形式 1.2e01
d 十進制整數 123
進制轉換 十進制 123
b 二進制 1101111
o 八進制 157
x 十六進制 6f
#x 小寫表示的十六進制 0x6f
#X 大寫表示的十六進制 0X6F
c 字符,打印前轉換為Unicode代碼 ‘123′

本文由學習總結而成,引用瞭一段代碼,文章中有引用號,引用鏈接放在下面:

https://www.jb51.net/article/226500.htm

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: