文數格式
文數格式指的是將文字字串和數字以指定的格式顯示出來, 例如:指定小數位數,加上千分位符號,...等。
設定格式的三個方法
Python設定文字數字格式,由舊而新,有以下三個方法:
- %-formatting - 百分比格式符號
- str.format() - 字串格式函式
- f-strings - F字串設定
方法一
%-formatting:使用 % (百分比)符號,在字串後面加上 % 符號,再加上指定參數。這個方法在 python 2.6 之前已被採用,但它可以接收的參數數量較受限制。這方法在 Python 3 仍然可以使用,但未來可能會被棄用,儘管沒有時間表。
pi = 3.14159 print(" pi = %1.2f " % pi) s1 = "cats" s2 = "dogs" s3 = " %s and %s living together" % (s1, s2)
字串格式化
Python 支援格式化字串的輸出。 這樣可能會用較複雜的表達式,但可以使用的變化較多。最基本的用法是將一個值插入到一個有字串格式符號 %s 的字串中。 它的格式使用與 C 中sprintf 函數一樣的語法。
#!/usr/bin/python3 print ( " 我叫%s今年%d歲! " % ( '小明' , 10 ) )
以上範例輸出結果:
我叫小明今年10歲!
字串格式化符號
符號 | 描述 |
---|---|
%c | 格式化字符及其ASCII碼 |
%s | 格式化字串 |
%d | 格式化整數 |
%u | 格式化無符號整型 |
%o | 格式化無符號八進制數 |
%x | 格式化無符號十六進制數 |
%X | 格式化無符號十六進制數(大寫) |
%f | 格式化浮點數字,可指定小數點後的精度 |
%e | 用科學計數法格式化浮點數 |
%E | 作用同%e,用科學計數法格式化浮點數 |
%g | %f和%e的簡寫 |
%G | %f 和%E 的簡寫 |
%p | 用十六進制數格式化變量的地址 |
格式化操作符輔助指令:
符號 | 功能 |
---|---|
* | 定義寬度或者小數點精度 |
- | 用做左對齊 |
+ | 在正數前面顯示加號( + ) |
<sp> | 在正數前面顯示空格 |
# | 在八進制數前面顯示零('0'),在十六進制前面顯示'0x'或者'0X'(取決於用的是'x'還是'X') |
0 | 顯示的數字前面填充'0'而不是默認的空格 |
% | '%%'輸出一個單一的'%' |
(var) | 映射變量(字典參數) |
mn | m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話) |
方法二
Python2.6 開始,新增了一種格式化字串的函數str.format(),它增強了字串格式化的功能。
使用 str.format():這是目前較普遍使用的方法,可以設定整數和浮點數的格式,也可以適用到字串的顯示方式。
若要查看結果,可以使用以下的語法格式:
print("FORMAT".format(NUMBER));
例如:
print("{:.2f}".format(3.1415926));
使用format配置參數有三種方式
- 使用 {} - 依照順序配置
txt1 = "My name is {}, I'm {}".format("John",36)
- 使用 {編號} - 編號由0開始,可以設定使用參數的順序
txt2 = "My name is {0}, I'm {1}".format("John",36)
- 使用 {變數} - 設定使用參數的變數, format的參數中必須指定參數名稱
txt3 = "My name is {fname}, I'm {age}".format(fname = "John", age = 36)
參考資料
以下是數字格式常見的設定方法:
數字 | 格式 | 輸出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} | 3.14 | 保留小數點後兩位 |
3.1415926 | {:+.2f} | +3.14 | 帶符號保留小數點後兩位 |
-1 | {:+.2f} | -1.00 | 帶符號保留小數點後兩位 |
2.71828 | {:.0f} | 3 | 不帶小數 |
5 | {:0>2d} | 05 | 數字補零 (填充左邊, 寬度為2) |
5 | {:x<4d} | 5xxx | 數字補x (填充右邊, 寬度為4) |
10 | {:x<4d} | 10xx | 數字補x (填充右邊, 寬度為4) |
1000000 | {:,} | 1,000,000 | 以逗號分隔的數字格式 |
0.25 | {:.2%} | 25.00% | 百分比格式 |
1000000000 | {:.2e} | 1.00e+09 | 指數記法 |
13 | {:10d} | 13 | 右對齊 (默認, 寬度為10) |
13 | {:<10d} | 13 | 左對齊 (寬度為10) |
13 | {:^10d} | 13 | 中間對齊 (寬度為10) |
使用這個方法,也可以顯示不同的數字進位。例如:
'{:b}'.format(11) '{:d}'.format(11) '{:o}'.format(11) '{:x}'.format(11) '{:#x}'.format(11) '{:#X}'.format(11)
結果為:
1011 11 13 b 0xb 0XB
格式用法說明:
: 號後面帶填充的字元,而且只能是一個字元,不指定則預設是用空格填充。
^, <, > 分別是居中、左對齊、右對齊,後面帶寬度。
+ 表示在正數前顯示 +,負數前顯示 -; (空格)表示在正數前加空格
b、d、o、x 分別是二進制、十進制、八進制、十六進制。
此外可以使用大括號 {} 來轉義大括號,如下實例:
#!/usr/bin/python # -*- coding: UTF-8 -*- print ("{} 對應的位置是 {{0}}".format("wenzao"))
輸出結果為:
wenzao 對應的位置是 {0}
參考資料
方法三
F-Strings:這個方法是在 Python 3.6 之後導入使用,方法是在字串的引號前面加上 f 字元(大小寫皆可),例如: f"string",這方法使用較簡短的語法,使它更容易使用並且可以用樣板型式。 這個方法與str.format()設定變數的方式很類似,在文字字串裡面加入 {變數} 作為格式化的依據,但功能更多:
實例 1
age = 24 name = "John" print(f"{name} is {age} years old.") # outputs: John is 24 years old.
實例 2.加上 = (等於)符號
book = "Lord of the Rings" author = "J.R.R. Tolkien" print( f"{book = } \n{author = }" ) # 執行結果 # book = 'Lord of the Rings' # author = 'J.R.R. Tolkien'
實例 3.設定大數字格式
number = 123454353453 print(f"The value of the company is {number:,d}") # outputs: The value of the company is 123,454,353,453
實例 4.設定日期格式
from datetime import datetime today = datetime.today().date() print(f"Today is {today}") print(f"Today is {today:%Y/%m/%d}") # outputs: Today is 2021-09-07 # outputs: Today is 2021/09/07
實例 5.可以做數字計算,例如:
print( f"Do math: 3 * 6 = {3 * 6}" ) # outputs: Do math: 3 * 6 = 18
實例 6.可以呼叫函式,例如:
verb = "runs" print( f"The girl {verb.upper()} quickly." ) # outputs: The girl RUNS quickly.
實例 7.可以填充數字,例如:
a = 4 b = 123 print(f"Product numbers are {a:03} and {b:03}") # outputs: Product numbers are 004 and 123
實例 8.印出原始字串(!r)
aaa = "Hello \n World" print(f'The welcome string is {aaa!r}') # outputs: The welcome string is 'Hello \n World'
字串三種引用符號均可使用,例如,以下三個方法所得到的結果相同:
name = "Fred" print( f'{name}' ) print( f"{name}" ) print( f"""{name}""" )