Python格式化輸出:%s和format()用法比較

2021-02-19 戀習Python

1、python格式化輸出歷史起源


python2.5之前,我們使用的是老式格式化輸出:%s。從python3.0開始起(python2.6同期發布),同時支持兩個版本的格式化,多出來的一個新版本就是利用format()函數,進行格式化輸出。


2、為什麼要學習python3支持的新式格式化輸出呢?


雖然老式的語法,兼容性很好,但是它的功能很少,很難完成複雜的任務,而format()函數進行格式化輸出,功能更加強大,從下面的學習中你會慢慢體會到。



a = "%s張飛%s關羽%s劉備%s趙雲" % (1,2,3,4)
display(a)

b  = "{}張飛{}關羽{}劉備{}趙雲".format(1,2,3,4)
display(b)


結果如下:



1)format()支持位置格式化填充,%s不支持;


# 方式一---
c = "{3}張飛{1}關羽{2}劉備{0}趙雲".format(1,2,3,4)
display(c)
# 方式二---
def my_hobbies(fruit,ball,drink):
    hobbies = "我喜歡水果{fruit},我也喜歡球類{ball},我還喜歡飲料{drink}".format(ball=ball,fruit=fruit,drink=drink)
    return hobbies

fruit = "apple"
ball = "basketball"
drink = "milk"
my_hobbies(fruit,ball,drink)
# 方式二---
fruit = "apple"
ball = "basketball"
drink = "milk"
hobbies = "我喜歡水果{fruit},我也喜歡球類{ball},我還喜歡飲料{drink}".format(ball=ball,fruit=fruit,drink=drink)
display(hobbies)


結果如下:




1)填充(只能用一個字符進行填充)


① 什麼是填充?

② %s:實現填充功能;


a = "%s" % ("張飛")
display(a)

b = "%10s" % ("張飛")
display(b)


結果如下:



③ format():實現填充功能;


c = "{}".format("張飛")
display(c)

d = "{:10}".format("張飛")
display(d)


結果如下:



總結如下:通過上述案例結果呈現,當使用的是%s,進行字符串填充的時候,默認是在原字符串左側進行填充;當使用的是format(),進行字符串填充的時候,默認是在原字符串右側進行填充。這就是我們下面要講述的"對齊"。


2)對齊


① 什麼是對齊?


② %s:實現對齊功能,只有左對齊和右對齊;


# 左填充
a = '%10s' % ('張飛')
display(a)
# 右填充
b = '%-10s' % ('張飛')
display(b)


結果如下:



③ format():實現對齊功能,不僅有左對齊和右對齊,還有居中對齊;


# 左填充
a = ':>10'.format('張飛')
display(a)

# 右填充
b = ':<10'.format('張飛')
display(b)

# 居中填充
c = ':^10'.format('張飛')
display(c)


結果如下:



④ 使用"特定符號"進行填充;





概念:如果我們指定的"截斷長度",比實際給出的"字符串"的長度要短,會發生截斷。


1)長度和截斷長度的區別


① 什麼是長度?


「{:8}」.format(「xishi is beautiful」)中,這個8表示的是填充長度,又稱為長度,當字符串長度小於這個長度8的時候,會發生填充;當字符串長度大於這個長度8的時候,長度無效,返回的仍然是原來的字符串。


操作如下:


a = "{:8}".format("xishi")
display(a)

b = "{:8}".format("xishi is beautiful")
display(b)


結果如下:



② 什麼是截斷長度?


「{:10.8}」.format(「xishi is beautiful」)中,這個".8"叫做截斷長度,這個10叫做填充長度。


注意:只有字符串的長度大於這個階段長度的時候,才會發生截斷。當既有截斷長度,又有填充長度的時候一般先進行截斷,截斷後再進行填充。

操作如下:


a = "{:.8}".format("xishi is beautiful")
display(a)

# 當字符串長度,小於截斷長度,返回原始字符串,截斷長度無效;
b = "{:.8}".format("abc")
display(b)


結果如下:



③ 填充長度和截斷長度的聯合使用


a = "{:*>15.8}".format("xishi is beautiful")
display(a)


結果如下:



注意:當既有截斷長度,又有填充長度的時候一般先進行截斷,截斷後,再進行填充。


④ 使用%s完成截斷


a = "%.8s" % ("xishi is beautiful")
display(a)

b = "%15.8s" % ("xishi is beautiful")
display(b)


結果如下:





1)引入案例


a = '{}-{}'.format("1","2")
display(a)

b = '{}-{}'.format(1,2)
display(b)


結果如下:



存在的問題:


format()中明明需要傳入字符串,可是這裡傳入數值,卻沒有報錯,這是為什麼呢?


原因是:python自動幫我們做了一次隱式轉換,但是這種隱式轉換是需要代價的,它會消耗額外的性能,犧牲速度。


因此,我們需要用特定的語法去解決這個問題。


2)填充整數,使用d


① 使用%s完成整數的填充;


a = '%5d' % (3000)
display(a)

b = '%d' % ("3000")
display(b)


結果如下:



② 使用format()完成整數的填充;


a = '{:$>5d}'.format(3000)
display(a)

b = '{:¥>5d}'.format(3000)
display(b)


結果如下:



3)填充浮點數,使用f(這個才是最常用的,用於保留小數點的位數);


① 引入案例


a = '{:f}'.format(3.14159268)
display(a)

b = '{:f}'.format(3.1415921)
display(b)

c = '{:f}'.format(312)
display(c)

d = '{:d}'.format(12,34)
display(d)


結果如下:



存在的問題:


1)當使用的f的時候,不管你傳入的數字有幾個小數位,最終都將返回一個六位數的小數,這個問題源自c語言,你也不用管,自己知道就行。


2)當使用f的時候,可以傳入整數;當使用d的時候,就只能傳入整數,而不能傳入小數。


② 使用%s完成浮點數填充,保留2位有效數字;


a = '%.2f' % (3.1415)
display(a)


結果如下:



③ 使用format()完成浮點數的填充,保留2位有效數字;


b = '{:.2f}'.format(3.1415)
display(b)

c = '{:$>5.2f}'.format(3.1415)
display(c)


結果如下:


注意:在使用浮點數填充的時候,用的最多的就是保留幾位有效數字,由於返回值默認是保留6位小數,因此需要配合使用"截斷"。

相關焦點

  • python語言-字符串格式
    python3以後,新增了一種格式化字符串的函數str.format(),它增強了字符串格式化的功能。相對於老版的%格式方法,它有很多優點。1.在%方法中%s只能替代字符串類型,而在format中不需要理會數據類型;2.單個參數可以多次輸出,參數順序可以不相同;3.填充方式十分靈活,對齊方式十分強大;4.官方推薦用的方式,%方式將會在後面的版本被淘汰。
  • Python 格式化字符串,這個方法真的即絲滑又舒服!
    一堆堆的爛數據裡面有很多的字符串,所以最近老用到格式化字符串...按理說我應該對這種重複性的動作很煩,起初確實是這樣,但是現在我樂在其中,為什麼呢?肯定不是腦子壞了,因為我最近學會了一個超好用的格式化字符串的方法,那是相當的絲滑,所以我又迫不及待的來分享啦!
  • python-docx段落設置
    段落設置界面在python-docx包中可以通過paragraph. alignment和paragraph.paragraph_format進行設置分別對應於了python-docx包docx.text.parfmt.ParagraphFormat中的left_indent、right_indent和first_line_indent屬性。
  • Python 基礎(字符串)
    python字符串是不可變數據類型,有序數據類型。》關注《數據STUDIO》'>>> s.lstrip('關注')'《數據STUDIO》關注《數據STUDIO》關注'一種字符串的格式化輸出方法字符串.format()str.fromat()的普通形式>>> print('{}{}《數據STUDIO》'.format(
  • python循環語句for和while用法-py猜數字小遊戲-學習python第4天
    這時我們如果採取老辦法,重複寫3600次print("python循環語句")是可以完成任務,但是這樣太枯燥、太乏味,作為程式設計師就應該學會變通,所以就出現了python循環語句,利用python循環語句,一小段代碼可以幫你解決重複輸出3600次的煩惱,可見python循環語句主要是用於解決某些重複的代碼工作。那麼有哪些是python循環語句呢?
  • 史上最全python字符串操作指南
    python定義字符、字符串沒有java那樣的嚴格,不管是單引號、雙引號、甚至是三個單引號和雙引號都可以用來定義字符(串),只要成對出現即可。比如:# 單個字符a='a'# 使用單引號定義字符串name='Uranus'# 使用雙引號定義字符串code = "Hello World ..."
  • python 系列(枚舉類型)
    枚舉 - 枚舉類型該enum模塊定義了具有迭代和比較功能的枚舉類型。它可用於為值創建定義明確的符號,而不是使用文字整數或字符串。創建枚舉class通過子類化Enum和添加描述值的類屬性,使用語法 定義新的枚舉。
  • 乾貨| 完美Python入門基礎知識點總結
    (關係)運算符賦值運算符邏輯運算符位運算符成員運算符身份運算符運算符優先級python算術運算符+加 - 兩個對象相加a + b 輸出結果 30-減 - 得到負數或是一個數減去另一個數a - b 輸出結果 -10*乘 - 兩個數相乘或是返回一個被重複若干次的字符串a * b 輸出結果 200/除 - x
  • Python生成一維碼,二維碼
    我們的生活已完全離不開一維碼和二維碼,本文會簡單的介紹如果通過python的方法來生成它們
  • word批量doc轉docx格式-python
    今天想要實現一個功能是將word內容轉換成HTML,查看了網上的代碼,還是比較簡單的,python中的PyDocX類庫可以實現功能。但是存在一個問題,就是word2003版本文檔後綴是.doc,在後期版本中後綴是.docx。
  • ...我們經常會需要在代碼中進行日期的轉換、日期的格式化等操作。
    在Java中進行日期處理大家一定都不陌生,我們經常會需要在代碼中進行日期的轉換、日期的格式化等操作。而一般我們進行日期格式化的時候都會使用SimpleDateFormat工具,之前我們有一篇文章介紹過SimpleDateFormat的線程安全問題(https://www.hollischuang.com/archives/3017),這一篇文章再來介紹一個和SimpleDateFormat有關,很容易被忽視,而一旦忽視可能導致大故障的問題。
  • Python3.9官方文檔翻譯版python簡介之列表
    這意味著輸出的切片返回的是列表的淺複製。自譯:」a,b = 0,1」第一行包含了多重賦值:變量a和b同時獲得新值0和1.在最後一行」a,b = b,a+b」也同樣使用了這種用法,在計算表達式時,先計算右側的求值」b,a+b」,在進行賦值」a,b」,右側的求值也是由左至右的順序進行。
  • Python實戰 | 只需 「4步」 入門網絡爬蟲
    因此,我們需要學會 MySql、MongoDB、SqlLite的用法。更加深入的,可以學習資料庫的查詢優化。JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。
  • python:控制流程 - for迭代循環
    #python語法規則:for i in obj:循環體 注意縮進3. range的用法:for i in range(21):for迭代的要點for 後面需要接上可迭代對象for會依次取出可迭代對象中的元素5.continue的用法:continue和break類似,但是continue不會終止循環,而是結束本次循環
  • 一日一技:用Python程序求解二次方程式
    時,用python程序計算二次方程的根值。 另外,說明一下,下面的示例,需要你有一定的python基礎,不然對於新手來說,會難以理解。 因此,這篇文章,適合於有一定python學習基礎的小夥伴。
  • 慢步學python,編程基礎,字符串類型例子及輸出
    想了解python的安裝及運行的可以看慢步之前寫的文章。今天繼續python編程基礎內容,字符串類型數據。python裡面主要的數據類型是數值類型和字符串類型。計算機可以進行運算的是數值,字符串不能進行數學運算,像你在閱讀的文字,可以理解為字符串的一種。
  • 會照片處理的不只是ps,還有Python!
    最近發現了程式設計師的p圖神器——python。 python也可以修圖嗎?是滴!下面就帶你進入python的修圖世界。(以下面這張照片為例。) 屬性定義了圖像的格式,如果圖像不是從文件打開的,那麼該屬性值為None: im.format 輸出:'JPEG' 03 查看大小 size屬性是一個tuple,表示圖像的寬和高(單位為像素):
  • Python字符串函數用法大全
    註:rindex()函數用法與index()函數相似,rindex()函數返回指定子字符串最後一次出現的位置,index()函數返回指定子字符串第一次出現的位置。如果有兩個參數x和y,它們必須是長度相等的字符串,並且在結果映射中,x中的每個字符都將映射到y中相同位置的字符(Unicode形式的映射)。如果有三個參數x,y和z.  x和y用法同上,z為指定要刪除的字符串,其結果中的字符將一一映射為:None。