1. 程式人生 > 程式設計 >Python變數格式化輸出實現原理解析

Python變數格式化輸出實現原理解析

print() 函式使用以 % 開頭的轉換說明符對各種型別的資料進行格式化輸出。

轉換說明符(Conversion Specifier)只是一個佔位符(也稱為格式化操作符),它會被後面表示式(變數、常量、數字、字串、加減乘除等各種形式)的值代替。

轉換說明符 解釋
%d、%i 轉換為帶符號的十進位制整數
%o 轉換為帶符號的八進位制整數
%x、%X 轉換為帶符號的十六進位制整數
%e 轉化為科學計數法表示的浮點數(e 小寫)
%E 轉化為科學計數法表示的浮點數(E 大寫)
%f、%F 轉化為十進位制浮點數
%g 智慧選擇使用 %f 或 %e 格式
%G 智慧選擇使用 %F 或 %E 格式
%c 格式化字元及其 ASCII 碼
%r 使用 repr() 函式將表示式轉換為字串
%s 使用 str() 函式將表示式轉換為字串
%% 輸出%

在 print() 函式中,由引號包圍的是格式化字串,它相當於一個字串模板,可以放置一些轉換說明符(佔位符)。

中間的%是一個分隔符,它前面是格式化字串,後面是要輸出的表示式。

當然,格式化字串中也可以包含多個轉換說明符,這個時候也得提供多個表示式,用以替換對應的轉換說明符,多個表示式必須使用小括號( )包圍起來。

舉例

name = '小明'
print("我的名字叫 %s,請多多關照!" % name)
# 我的名字叫 小明,請多多關照!

student_no = 1

print("我的學號是 %06d" % student_no)
# 我的學號是 000001

scale = 0.2
print("資料比例是 %.02f%%" % (scale * 100))
# 資料比例是 20.00%
指定最小輸出寬度

當使用轉換說明符時,可以使用下面的格式指定最小輸出寬度(至少佔用多少個字元的位置):

%10d 表示輸出的整數寬度至少為 10
%20s 表示輸出的字串寬度至少為 20
n = 1234567
print("n(10):%10d." % n)
print("n(5):%5d." % n)
url = "https://www.baidu.com/python/"
print("url(35):%35s." % url)
print("url(20):%20s." % url)

執行結果為:

n(10): 1234567.
n(5):1234567.
url(35): https://www.baidu.com/python/.
url(20):https://www.baidu.com/python/.

從執行結果可以發現,對於整數和字串,當資料的實際寬度小於指定寬度時,會在左側以空格補齊;當資料的實際寬度大於指定寬度時,會按照資料的實際寬度輸出。

指定對齊方式

預設情況下,print() 輸出的資料總是右對齊的。

當資料不夠寬時,資料總是靠右邊輸出,而在左邊補充空格以達到指定的寬度。

Python 允許在最小寬度之前增加一個標誌來改變對齊方式,Python支援的標誌如下。

標誌 說明
- 指定左對齊
+ 表示輸出的數字總要帶著符號;整數帶+,負數帶-。
0 表示寬度不足時補充 0,而不是補充空格。

幾點說明:

  • 對於整數,指定左對齊時,在右邊補0是沒有效果的,因為這樣會改變整數的值。
  • 對於小數,以上三個標誌可以同時存在。
  • 對於字串,只能使用-標誌,因為符號對於字串沒有意義,而補 0 會改變字串的值。

例子:

n = 123456
# %09d 表示最小寬度為9,左邊補0
print("n(09):%09d" % n)
# %+9d 表示最小寬度為9,帶上符號
print("n(+9):%+9d" % n)
f = 140.5
# %-+010f 表示最小寬度為10,左對齊,帶上符號
print("f(-+0):%-+010f" % f)
s = "Hello"
# %-10s 表示最小寬度為10,左對齊
print("s(-10):%-10s." % s)

執行結果

n(09):000123456
n(+9): +123456
f(-+0):+140.500000
s(-10):Hello .

指定小數精度

對於小數(浮點數),print() 還允許指定小數點後的數字位數,也即指定小數的輸出精度。

精度值需要放在最小寬度之後,中間用點號.隔開;也可以不寫最小寬度,只寫精度。具體格式如下:

%m.nf
%.nf

m 表示最小寬度,n 表示輸出精度,. 是必須存在的。

請看下面的程式碼:

f = 3.141592653
# 最小寬度為8,小數點後保留3位
print("%8.3f" % f)
# 最小寬度為8,小數點後保留3位,左邊補0
print("%08.3f" % f)
# 最小寬度為8,小數點後保留3位,左邊補0,帶符號
print("%+08.3f" % f)

執行結果:

3.142
0003.142
+003.142

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。