Python .format()函數(shù)使用方法詳解
format函數(shù)的調(diào)用
format函數(shù)可以被直接調(diào)用或在print函數(shù)中以占位符實現(xiàn)格式化調(diào)用。
在**2.6**版本前,占位符仍和其他語言一樣使用%(比如C中)。但在其后的版本,format函數(shù)的占位符更改為{}(花括號)。
優(yōu)化的目的目前總結(jié)出了4個:
1.花括號封閉可以實現(xiàn)更多格式化的實現(xiàn),更強(qiáng)大的功能
2.使代碼具有更強(qiáng)的可讀性。
3.單個參數(shù)可以多次輸出,參數(shù)順序可以不相同
4.不需要理會數(shù)據(jù)類型的問題,在%方法中%s只能替代字符串類型
好了,進(jìn)入正文,對于format函數(shù)的使用將分為兩部分。
1.format函數(shù)及其占位符的調(diào)用格式
2.占位符格式和參數(shù)設(shè)定
ps:在介紹的時候各個內(nèi)容會有小小的穿插,其實是為了更加便于理解~
format函數(shù)及其占位符的調(diào)用格式
format函數(shù)可以直接被調(diào)用,比如在shell中直接調(diào)用
例1
>>>'{} {}'.format('hello','world') #占位符不指定順序 'hello world' >>>'{0} {1}'.format('hello','world') #占位符制定順序 'hello world' >>>'{1} {0}'.format('hello','world') #換一下順序試試 'world hello'
我們更常用的方式是放入print()函數(shù)中進(jìn)行格式化輸出
例2
print('{}獲得了S8冠軍'.format('IG') #結(jié)果: #IG獲得了S8冠軍
占位符以及參數(shù)設(shè)定
在第一部分中,簡單地介紹了兩種調(diào)用format函數(shù)的方式。可以很清晰地發(fā)現(xiàn),在占位符中也可以輸入一些參數(shù),對格式化輸出的參數(shù)進(jìn)行設(shè)定,下面就詳細(xì)的介紹占位符中各項參數(shù)的順序和設(shè)置。
占位符中的各項參數(shù)格式如下所示
例3(偽代碼)
'{position/key:fill,align,sign,width,precision,type}'.format(...)
position/key
position/key指定了占位符處從format函數(shù)的參數(shù)中調(diào)用哪個值,position很好理解,比如上面例1中介紹的后兩種調(diào)用,就指定了format中兩個參數(shù)hello和world在占位符中調(diào)用的順序,注意這個順序是按照數(shù)組排序中從‘0'開始計算的。 當(dāng)然,你也可以使用鍵值對進(jìn)行操作。比如下面的例4:
例4
print( 'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(S8='IG',S9='FPX')) #結(jié)果:the championship of the S8 is IG, and for S9, it'FPX.
有寫小伙伴可能要問了,鍵值對(字典)的使用在這里有什么好處嗎?感覺還不如填個數(shù)字來的快捷啊?
再來看下面這一段代碼:
例5:
dic={'S8':'IG','S9':'FPX'} print( 'the championship of the S8 is {S8}, and for S9, it\'s {S9}.'.format(**dic)) #結(jié)果:the championship of the S8 is IG, and for S9, it'FPX.
在例5中,有些需要特別說明的地方,首先如果你要在format的括號里調(diào)用字典,記得在字典名前面加**,也就是字典的函數(shù)調(diào)用方法哦!從例5中應(yīng)該能發(fā)現(xiàn)了,我們不需要在format中專門把字典列出來,而是可以調(diào)用以前定義過的字典,這就使得其具備了重復(fù)調(diào)用的優(yōu)點(diǎn)。想象一下這一點(diǎn)會有什么不同,這是%方法做不到的哦。
你也可以用數(shù)組的形式填充,如例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.
第一個位置的參數(shù),也是冒號前唯一的參數(shù)相信大家就搞明白啦。
下面的參數(shù)都是并列的,我們一個一個說明。首先要講清楚這些參數(shù)如何并列或分隔。
那就是無需分隔,沒錯,下面的這些參數(shù),你需要定義哪些就按照順序?qū)懴戮托?,不用加什么逗號或者空格分開,你可能會想,這不容易產(chǎn)生歧義嗎?我學(xué)習(xí)的時候也想過這個問題,事實是開發(fā)者編輯函數(shù)邏輯時就吧這些參數(shù)的設(shè)定值用不會產(chǎn)生任何歧義的符號或數(shù)字組合起來了,這一點(diǎn)當(dāng)你使用時也會發(fā)現(xiàn)。
fill參數(shù)
fill參數(shù)用于指定填充符,默認(rèn)值為空格,實際經(jīng)驗是,很少有場景會用到這個參數(shù),除非是按照國際通用的三位一個逗號分隔數(shù)字等場景。
例7:
>>> print('{:,}'.format(12345678)) 12,345,678
align參數(shù)
align參數(shù)用于格式化文本的對齊方式,當(dāng)你填充了寬度的時候,這個參數(shù)的作用是很大的,當(dāng)然,在一句話中無縫的插入一個格式化文本的話,這個參數(shù)的設(shè)置就不大有意義了。
> | < | ^ |
右對齊 | 左對齊 | 居中對齊 |
例8:
在shell中運(yùn)行如下代碼(代碼中數(shù)字三十表示寬度,目的是為了拉大總體寬度顯示出對齊的效果,后文會提到寬度的使用方法)
>>> print('{:<30}'.format('pos')) pos >>> print('{:>30}'.format('pos')) pos >>> print('{:^30}'.format('pos')) pos
sign參數(shù)
sign參數(shù)用于指定是否保留正負(fù)號,這個針對format中數(shù)字起作用。
+ | - | SPACE |
保留正負(fù)號 | 僅保留負(fù)號 | 正數(shù)留空,負(fù)數(shù)保留負(fù)號 |
例9:
>>> print('{0:+} {0:-} {0: }'.format(123)) +123 123 123 >>> print('{0:+} {0:-} {0: }'.format(-123)) -123 -123 -123
ps:注意第一行代碼運(yùn)行結(jié)果中最后一個保留了一個空格哦
width參數(shù)
width參數(shù)控制輸出的長度,經(jīng)過我的測試,該長度為最小長度,即當(dāng)設(shè)定的width參數(shù)小于format中調(diào)用的值時,不生效;而當(dāng)設(shè)定值大時,會用空格(默認(rèn))或零進(jìn)行填補(bǔ),如果想要用0進(jìn)行填補(bǔ),那么需要在width前添加0,width參數(shù)的使用如例10所示。在例8中展示對齊參數(shù)時也使用了寬度參數(shù),可以看出對齊是對我們的填補(bǔ)方式存在影響,其具體影響也在例10中給出。
例10:
print('{0:12} {0:05} {0:2}'.format(123)) #依次為12位寬空格填補(bǔ)、5位寬0填補(bǔ)、2位寬 #結(jié)果: # 123 00123 123 print('{0:<012},{0:>012},{0:^012} '.format(123)) #結(jié)果: #123000000000,000000000123,000012300000 print('{0:^012},{1:^012},{0:^011},{1:^011} '.format(123,1234)) #結(jié)果: #000012300000,000012340000,00001230000,00012340000
可以看出空格的填補(bǔ)同樣以對齊的區(qū)別顯示出來,但是0的填補(bǔ)卻往往改變了我們數(shù)字的表示,使用時要注意。另一個要注意的是當(dāng)你的總寬度和數(shù)據(jù)的有效寬度的奇偶性不同時,居中對齊的方式會有不同,這就是例10中第三行代碼希望表達(dá)的意思??梢钥闯?,當(dāng)奇偶次出現(xiàn)不同時,總是偏向左一位對齊。
precision參數(shù)
和%方法中一樣,如%.3f表示保留小數(shù)點(diǎn)三位小數(shù),用【.保留有效數(shù)字位數(shù)(f)】表示數(shù)據(jù)的精確度,如果添加f,則表明保留的為小數(shù)點(diǎn)后位數(shù),如果不加,則表示保留的是有效數(shù)字位數(shù)。例11很好的展示了這種區(qū)別。
例11:
print('{0:.2f},{0:.7f},{0:.2},{0:.2%} '.format(123.123456789)) #結(jié)果: #123.12,123.1234568,1.2e+02,12312.35%
其實小伙伴們應(yīng)該注意到了,這里的f,%其實都算是precision參數(shù)后的type參數(shù)控制的內(nèi)容——數(shù)據(jù)類型。因此,我們對精度簡單介紹,而將precision-type參數(shù)的聯(lián)合參數(shù)具體介紹,因為二者具有很強(qiáng)的關(guān)聯(lián)。
precision-type參數(shù)
首先介紹所有的type參數(shù),如下表所示:
type參數(shù) | 含義 | 例 | |
---|---|---|---|
默認(rèn) | 十進(jìn)制整數(shù) | 123 | |
f | 浮點(diǎn)數(shù) | 123.123 | |
% | 百分比格式 | 12312.3% | |
e | 指數(shù)形式 | 1.2e01 | |
- | d | 十進(jìn)制整數(shù) | 123 |
進(jìn)制轉(zhuǎn)換 | 十進(jìn)制 | 123 | |
b | 二進(jìn)制 | 1101111 | |
o | 八進(jìn)制 | 157 | |
x | 十六進(jìn)制 | 6f | |
#x | 小寫表示的十六進(jìn)制 | 0x6f | |
#X | 大寫表示的十六進(jìn)制 | 0X6F | |
c | 字符,打印前轉(zhuǎn)換為Unicode代碼 | ‘123' |
本文由學(xué)習(xí)總結(jié)而成,引用了一段代碼,文章中有引用號,引用鏈接放在下面:
http://chabaoo.cn/article/226500.htm
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python虛擬環(huán)境virtualenv的安裝與使用詳解
virtualenv可以用來管理互不干擾的獨(dú)立python虛擬環(huán)境,在有些場景下非常有用,下面這篇文章主要給大家介紹了Python虛擬環(huán)境virtualenv安裝與使用的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05python+matplotlib繪制餅圖散點(diǎn)圖實例代碼
這篇文章主要介紹了python+matplotlib繪制餅圖散點(diǎn)圖實例代碼,本實例是官網(wǎng)的一個實例,不過也很簡單,大家可以參考下2018-01-01Pytorch數(shù)據(jù)讀取與預(yù)處理該如何實現(xiàn)
這篇文章主要介紹了Pytorch數(shù)據(jù)讀取與預(yù)處理該如何實現(xiàn),幫助大家更好的理解和學(xué)習(xí)使用Pytorch,感興趣的朋友可以了解下2021-03-03六種酷炫Python運(yùn)行進(jìn)度條效果的實現(xiàn)代碼
這篇文章主要介紹了六種酷炫Python運(yùn)行進(jìn)度條的實現(xiàn)代碼,本文通過實例圖文相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07Python實現(xiàn)PDF到Word文檔的高效轉(zhuǎn)換
這篇文章主要為大家詳細(xì)介紹了如何使用Python編程語言,結(jié)合庫和工具,將PDF文件轉(zhuǎn)換為可編輯的Word文檔,使文檔的編輯變得方便高效,需要的可以參考下2024-01-01Python人工智能構(gòu)建簡單聊天機(jī)器人示例詳解
這篇文章主要為大家介紹了Python人工智能構(gòu)建簡單聊天機(jī)器人示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03