程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

6.1_6 Python3.x入門 P6 【字符串格式化】四種方式(手動、%-formatting、str.format()、f-String)

編輯:Python

相關鏈接

  • 目錄
  • Mac M1 Python環境搭建
  • Python3.x入門 P1 【基礎】注釋、標識符、變量、數據類型
  • Python3.x入門 P2 【基礎】運算符
  • Python3.x入門 P3 【基礎】流程語句【循環結構】
  • Python3.x入門 P4 【基礎】可變序列(列表list、字典dict、集合set)
  • Python3.x入門 P5 【基礎】不可變序列(元組tuple、字符串str)
  • Python3.x入門 P6 【字符串格式化】四種方式(手動、%-formatting、str.format()、f-String)
  • Python3.x入門 P7 【函數】

一、字符串格式化

  • 目的:更漂亮的輸出格式
  • 版本:3.8.9(不同版本測試結果可能會有出入)

1.1 格式化初體驗

1) 手動Manual String Formatting。此方式能實現的效果有限,一般只能做簡單的格式處理。此方式在後文中不做詳細介紹。

通過如下方法進行對齊操作
center(): 居中對齊,第1個參數指定寬度,第2個參數指定填充符,第2個參數是可選的,默認是空格,如果設置寬度小於實際寬度則返回原字符串
ljust(): 左對齊,第1個參數指定寬度,第2個參數指定填充符,第2個參數是可選的,默認是空格,如果設置寬度小於實際寬度則返回原字符串
rjust(): 右對齊,第1個參數指定寬度,第2個參數指定填充符,第2個參數是可選的,默認是空格,如果設置寬度小於實際寬度則返回原字符串
zfill(): 右對齊,左邊用0填充,第1個參數指定寬度,如果設置寬度小於實際寬度則返回原字符串
案例
# 對齊格式輸出
for x in range(1, 11):
print(str(x).rjust(2), str(x * x).rjust(3), end=' ')
# Note use of 'end' on previous line
print(str(x * x * x).rjust(4))
''' 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 '''

2) %-formattingOld string formatting。此方式從一開始就在Python語言中。
其效果類似於在 C 語言中使用 %format % values%sprintf()。一些歷史遺留bug導致可能會無法正確顯示元組(tuples)和字典(dictionaries),官方文檔中建議使用str.format() 。

案例
# 1.順序定位
print('%s has %03d quote types.' % ('Python', 2)) # Python has 002 quote types.
# 2.關鍵字參數
print('%(language)s has %(number)03d quote types.' %
{
'language': "Python", "number": 2}) # Python has 002 quote types.

3) str.format()The String format() method。此方式從Python2.6開始引入。可以在Python官方更新日志中的PEP3101找到str.format()的詳細用法。str.format() 是對 %-formatting 的改進。它使用正常的函數調用語法,並且可以通過正在轉換為字符串的對象上的 format() 方法進行擴展。

案例
""" @author GroupiesM @date 2022/6/28 16:27 @introduction """
# 1.順序定位
print(1, 'We are the {} who say "{}!"'.format('knights', 'Ni')) # We are the knights who say "Ni!"
# 2.數字定位
print(2, '{0} and {1}'.format('spam', 'eggs')) # spam and eggs
print(2, '{1} and {0}'.format('spam', 'eggs')) # eggs and spam
# 3.關鍵字參數
print(3, 'This {food} is {adjective}.'.format(
food='spam', adjective='absolutely horrible')) # This spam is absolutely horrible.
# 4.數字定位 + 關鍵字參數
print(4, 'The story of {0}, {1}, and {other}.'.format(
'Bill', 'Manfred', other='Georg')) # The story of Bill, Manfred, and Georg.
# 5.拆分字典
table = {
'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
print(5, 'Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ''Dcab: {0[Dcab]:d}'
.format(table)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 6.解壓字典
table = {
'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
print(6, 'Jack: {Jack}; Sjoerd: {Sjoerd}; Dcab: {Dcab}'
.format(**table)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 7.解壓字典(指定類型)
table = {
'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
print(7, 'Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'
.format(**table)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 8.拆分列表
lst = [4127, 4098, 8637678]
print(8, 'Jack: {0[1]:d}; Sjoerd: {0[0]:d}; ''Dcab: {0[2]:d}'
.format(lst)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 9.解壓列表(默認排序)
lst = [4127, 4098, 8637678]
print(9, 'Jack: {}; Sjoerd: {}; ''Dcab: {}'
.format(*lst)) # Jack: 4127; Sjoerd: 4098; Dcab: 8637678
# 10.解壓列表(指定排序)
lst = [4127, 4098, 8637678]
print(10, 'Jack: {1}; Sjoerd: {0}; ''Dcab: {2}'
.format(*lst)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 11.解壓集合(默認排序)
st = {
4127, 4098, 8637678}
print(11, 'Jack: {}; Sjoerd: {}; ''Dcab: {}'
.format(*st)) # Jack: 4127; Sjoerd: 4098; Dcab: 8637678
# 12.解壓集合(指定排序)
st = {
4127, 4098, 8637678}
print(12, 'Jack: {1}; Sjoerd: {0}; ''Dcab: {2}'
.format(*st)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 13.拆分元組
tup = (4127, 4098, 8637678)
print(13, 'Jack: {0[1]:d}; Sjoerd: {0[0]:d}; ''Dcab: {0[2]:d}'
.format(tup)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 14.解壓元組(默認排序)
tup = (4127, 4098, 8637678)
print(14, 'Jack: {}; Sjoerd: {}; ''Dcab: {}'
.format(*tup)) # Jack: 4127; Sjoerd: 4098; Dcab: 8637678
# 15.解壓元組(指定排序)
tup = (4127, 4098, 8637678)
print(14, 'Jack: {1}; Sjoerd: {0}; ''Dcab: {2}'
.format(*tup)) # Jack: 4098; Sjoerd: 4127; Dcab: 8637678
# 16.遍歷格式化
for x in range(1, 11):
print(15, '{0:2d} {1:3d} {2:4d}'.format(x, x * x, x * x * x))
''' 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 '''

4) f-StringFormatted String Literalsf-String是指在字符串中直接使用Python變量,需要在字符串前加f或F標注。這種方式對數據處理更加靈活,甚至可以將變量代入函數後,輸出結果。

案例
# 1. 3.8新特性
name, score = '張三', 45.6
print(f'name={
name}, score={
score:.3f}') # Python3.6 name=張三, score=45.600
print(f'{
name=}, {
score=:.3f}') # Python3.8 name='張三', score=45.600
# 2.pi保留小數點後三位
import math
print(f'The value of pi is approximately {
math.pi:.3f}.') # The value of pi is approximately 3.142.
# 3.列對齊
table = {
'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
for name, phone in table.items():
print(f'{
name:10} ==> {
phone:10d}')
''' Sjoerd ==> 4127 Jack ==> 4098 Dcab ==> 7678 '''
# 4.格式轉換 【ascii()=!a】、【str()=!s】、【repr=!r】
animals = 'eels'
print(f'My hovercraft is full of {
animals}.') # My hovercraft is full of eels.
print(f'My hovercraft is full of {
animals!r}.') # My hovercraft is full of 'eels'.
# 5.嵌套計算 name='張三', (height+2)=182.40
name, age, height = '張三', 20, 180.4
print(f'{
name=}, {
(height+2)=:.2f}')
# 6.嵌套函數 name='張三', sum(height,3)=183.40
name, age, height = '張三', 20, 180.4
def sum(a, b):
return a + b
print(f'{
name=}, {
sum(height,3)=:.2f}')

1.2 Python官方文檔

百度搜不清楚的資料,或者不明確的,一切以官方文檔+本地測試結果為准:
The Python Tutorial-Python教程

Fancier Output Formatting-更漂亮的輸出格式


1.3 格式規范迷你語言

關於 Format Specification Mini-Language,其格式在str.format()以及f-String是類似通用的,但也有一些細微差別。這部分摘自官方文檔,僅做翻譯。

語法樹 format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
填充符 fill ::= <any character>
對齊方式 align ::= "<" | ">" | "=" | "^"
符號選項 sign ::= "+" | "-" | " "
總長度 width ::= digit+
分組選項 grouping_option ::= "_" | ","
有效數字 precision ::= digit+
數據類型 type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
align-對齊方式選項含義‘<’強制字段在可用空間內左對齊(這是大多數對象的默認設置)。‘>’強制字段在可用空間內右對齊(這是數字的默認值)。‘=’強制將填充放在符號(如果有)之後,但放在數字之前。這用於打印格式為“+000000120”的字段。
此對齊選項僅對數值類型有效。當“0”緊跟在字段寬度之前時,它將成為默認值。‘^’強制字段在可用空間內居中。sign-符號選項符號選項僅對數字類型有效,並且可以是以下選項之一:選項含義‘+’表示正數前添加’+‘,負數前添加’-'。‘-’表示正數不添加,負數前添加’-'(默認選項)。不填表示正數前添加’ ‘,負數前添加’-'。type-數據類型

1.字符型

選項含義函數‘s’字符串格式。(默認選項)str()不填與’s’相同。

2.整數型(%-formatting不支持參數b,%-formatting不支持參數不填)

選項含義函數‘b’二進制格式。輸出以 2 為基數的數字。bin()‘c’字符。在打印之前將整數轉換為相應的 unicode 字符。chr()‘d’十進制整數。輸出以 10 為基數的數字。‘o’八進制格式。輸出以 8 為基數的數字。oct()‘x’十六進制格式。輸出以 16 為基數的數字,對 9 以上的數字使用小寫字母。hex()‘X’十六進制格式。輸出以 16 為基數的數字,對 9 以上的數字使用大寫字母。hex()‘n’與’d’相同。不填與’d’相同。

3.浮點型

選項含義函數‘e’科學記數法。對於給定的精度,用科學記數法格式化數字,用字母“e”將系數與指數分開。
該系數在小數點之前有一位數字,在小數點之後有一位數字,總共有一位有效數字。
在沒有給出精度的情況下,使用小數點後的數字精度作為浮點數,並顯示十進制的所有系數數字。
如果小數點後面沒有數字,則除非使用該選項,否則也會刪除小數點。‘E’與’e’相同,但用字母"E"將系數與指數分開。‘f’定點表示法。將整數、浮點數轉換成浮點數表示。按照指定percision保留小數,如果未指定默認保留6位小數。‘F’與’f’相同。區別是’f’ :nan(無窮小),inf(無窮大),‘F’ :NAN(無窮小),INF(無窮大)。‘g’常規格式。自動調整將整數、浮點數轉換成 浮點型或科學計數法表示。‘G’與’g’相同。區別參考’e’與’E’,和’f’與’F’‘n’與’g’相同。‘%’百分比。將數字乘以100,加上百分號,默認保留6位小數不填與’d’相同。

1.4 語法示例

1. %-formatting

""" 格式一: 1.一個參數:print('我叫%s' % name) # 可以省略括號 2.多個參數:print('我叫%s,今年%d歲' % (name, age)) """
name, age, height = '張三', 20, 180.4
print('%s' % name) # 張三
print('%s--%f' % (name, height)) # 張三--180.400000
""" 格式二: 1.一個參數:print('%(name)s' % {'name': '張三'}) 2.多個參數:print('%(name)s--%(age)d' % {'name': '張三', 'age': 18}) """
name, age, height = '張三', 20, 180.4
print('%(name)s' % {
'name': '張三'}) # 張三
print('%(name)s--%(age)d' % {
'name': '張三', 'age': 18}) # 張三--18

2. str.format()

"""方式一:指定參數"""
'''1.1 不設置指定位置,按默認順序'''
name, age, height = '張三', 20, 180.4
print(1.1, '我叫{},我叫{},今年{}歲,身高{}'.format(name, name, age, height, )) # 我叫張三,我叫張三,今年20歲,身高180.4
'''1.2 設置指定位置'''
name, age, height = '張三', 20, 180.4
print(1.2, '我叫{0},我叫{0},今年{1}歲,身高{2}'.format(name, age, height)) # 我叫張三,我叫張三,今年20歲,身高180.4
'''1.3 設置參數 網站名:菜鳥教程, 地址 www.runoob.com '''
name, age, height = '張三', 20, 180.4
print(1.3, '網站名:{name}, 地址 {url}'.format(name="菜鳥教程", url="www.runoob.com"))
'''方式二:通過序列獲取'''
'''2.1 通過字典dict設置參數(解包) 網站名:菜鳥教程, 地址 www.runoob.com '''
name, age, height = '張三', 20, 180.4
site_dict = {
"name": "菜鳥教程", "url": "www.runoob.com"}
print(2.1, "網站名:{name}, 地址 {url}".format(**site_dict)) # 使用**解包操作
'''2.2 通過字典dict設置參數(不解包) 網站名:菜鳥教程, 地址 www.runoob.com '''
name, age, height = '張三', 20, 180.4
site_dict = {
"name": "菜鳥教程", "url": "www.runoob.com"}
print(2.2, "網站名:{0[name]}, 地址 {0[url]}".format(site_dict)) # "0" 是固定寫法 使用[]訪問字典
'''2.3 通過列表list索引設置參數 網站名:菜鳥教程, 地址 www.runoob.com '''
name, age, height = '張三', 20, 180.4
my_list = ['菜鳥教程', 'www.runoob.com']
print(2.3, "網站名:{}, 地址 {}".format(*my_list)) # 使用*解包操作
'''2.4 通過列表list索引設置參數 網站名:菜鳥教程, 地址 www.runoob.com '''
name, age, height = '張三', 20, 180.4
my_list = ['菜鳥教程', 'www.runoob.com']
print(2.4, "網站名:{0[0]}, 地址 {0[1]}".format(my_list)) # "0" 是固定寫法的

3. f-String

# 小寫f
name, age, height = '張三', 20, 180.4
print(f'我叫{
name},我叫{
name},今年{
age}歲,身高{
height}') # 我叫張三,我叫張三,今年20歲,身高180.4
# 大寫F
name, age, height = '張三', 20, 180.4
print(F'我叫{
name},我叫{
name},今年{
age}歲,身高{
height}') # 我叫張三,我叫張三,今年20歲,身高180.4

二、%-formatting

""" @author GroupiesM @date 2022/6/22 14:20 @introduction 字符串格式化-方式1 %【不推薦】 1.簡介 %號格式化字符串的方式從Python誕生之初就已經存在。 目前,Python官方沒有棄用這種方式,但也不推薦這種方式。 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} ${name} 【可選】,用於選擇指定的key ${#} 【可選】對於八進制(oct)、十六進制(hex),如果加上#,會顯示0o/0x,否則不顯示 ${flags} 【可選】,對齊方式、正負號,可供選擇的值有:【+、-、 、0】 + 右對齊:正數的加正號,負數的加負號 - 左對齊:正數前沒有負號,負數前加負號 空格 右對齊:正數前加空格,負數前加負號; 0 右對齊:正數前無符號,負數前加負號;用0填充空白處 ${width} 【可選】,總長度(不足位數補空格) ${.precision} 【可選】,有效位數 ${typecode} 【必選】,數據類型、格式 1)傳入"字符串類型"的參數 s,獲取傳入的對象 str() 方法的返回值(字符串-供人閱讀),並將其格式化到指定位置 r,獲取傳入對象的 repr() 方法的返回值(字符串-供解釋器使用),並將其格式化到指定位置 空白,未指定類型,則默認s 2)傳入"整數類型"的參數 c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 --%格式符:沒有b(2進制數字)方法,format格式化可以支持-- d,10進制整數 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文小寫) X,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文大寫) 3)傳入"浮點型或小數類型"的參數 e,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e) E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E) f,將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點後6位) F,同上 g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;) G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;) %,將數字乘以100,加上百分號,默認保留6位小數。當字符串中存在格式化標志時,需要用%%表示一個百分號。 ${content} 【必選】,要格式化的內容 """
'''完整語法示例1: -16.9 1) ${flag} = '0' 右對齊:正數前無符號,負數前加負號;用0填充空白處 2) ${width} = '10' 總長度(不足位數補空格) 3) ${precision} = '5,有效位數 4) ${typecode} = 'f','數據類型float '''
print('%(money)#010.5f' % {
'money': -16.9})# -016.90000
'''完整語法示例2: 100 1) ${flag} = '+' 右對齊:正數的加正號,負數的加負號 2) ${#} = '#' 對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 3) ${width} = '10' 總長度(不足位數補空格) 4) ${precision} = '5',有效位數 5) ${typecode} = 'f',數據類型float '''
print('%(money)#+10d' % {
'money': 100}) # +0o00144

2.1 【flags】對齊方式、正負號

""" @author GroupiesM @date 2022/6/23 16:26 @introduction 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} """
name, age, money, height = '張三', 20, -20, 180.4
''' 對齊方式、正負號${flags}:【可選】 不填 右對齊:正數前加空格,負數前加負號 + 右對齊:正數的加正號,負數的加負號 - 左對齊:正數前沒有負號,負數前加負號 空格 右對齊:正數前加空格,負數前加負號 0 右對齊:正數前無符號,負數前加負號;用0填充空白處 P.S 1.只有當${width}>內容長度時,對齊方式才有效 2.不同${typecode}會影響對齊的方式,下面針對 s字符串、d整數、f浮點型 三種類型測試 '''
print('----s字符串----')
print(1, '%10s' % name)
print(2, '%+10s' % name)
print(3, '%-10s' % name)
print(4, '% 10s' % name)
print(5, '%010s' % name)
''' 1 張三 2 張三 3 張三 4 張三 5 張三 '''
print('----d整數----')
print(1, '%10d' % money)
print(2, '%+10d' % money)
print(3, '%-10d' % money)
print(4, '% 10d' % money)
print(5, '%010d' % money)
''' 1 -20 2 -20 3 -20 4 -20 5 -000000020 '''
print('----f浮點型----')
print(1, '%15f' % height)
print(2, '%+15f' % height)
print(3, '%-15f' % height)
print(4, '% 15f' % height)
print(5, '%015f' % height)
''' 1 180.400000 2 +180.400000 3 180.400000 4 180.400000 5 00000180.400000 '''

2.2 【width】總長度

""" @author GroupiesM @date 2022/6/23 16:26 @introduction 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} """
name, age, money, height = '張三', 20, -20, 180.4
''' 總長度${width}:【可選】 %s 不指定長度 %1s ${width} < 字符長度,不生效 %2s ${width} = 字符長度,不生效 %10 ${width} > 字符長度,生效 '''
print('%s' % name)
print('%1s' % name)
print('%2s' % name)
print('%10s' % name)
''' 張三 張三 張三 張三 '''

2.3 【percision】有效位數

""" @author GroupiesM @date 2022/6/23 16:26 @introduction 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} """
name, age, money, height = '張三', 20, -20, 180.4
''' 有效位數${.precision}:【可選】 1.字符串:'張三',${.precision}會截取字符串 %s 不指定${precision} %.1s ${.precision} < 字符長度,從左到右截取1位 '張' %.2s ${.precision} = 字符長度,不生效 %.10 ${.precision} > 字符長度,不生效 2.整數:'23',${.precision}超過長度部分在前面補0 %d 不指定${precision} %.1d ${.precision} < 整數長度,不生效 %.2d ${.precision} = 整數長度,不生效 %.10 ${.precision} > 整數長度,超出部分在前面補0 3.浮點型 '180.45',${precision}表示有效位數(其中浮點型表示:小數點後位數),默認${precision}=6 %f 不指定${precision},保留6位小數 '180.450000' %.1f ${.precision} < 字符長度,保留1位小數 '180.4' %.2f ${.precision} = 字符長度,保留2位小數 '180.45' %.15f ${.precision} > 字符長度,保留15位小數 '180.449999999999989' '''
print('----s字符串----')
print(1, '%s' % name)
print(2, '%.1s' % name)
print(3, '%.2s' % name)
print(4, '%.10s' % name)
''' 1 張三 2 張 3 張三 4 張三 '''
print('----s字符串(指定長度)----')
print(1, '%10s' % name)
print(2, '%10.1s' % name)
print(3, '%10.2s' % name)
print(4, '%10.10s' % name)
''' 1 張三 2 張 3 張三 4 張三 '''
print('----d整數----')
print(1, '%d' % age)
print(2, '%.1d' % age)
print(3, '%.2d' % age)
print(4, '%.5d' % age)
''' 1 23 2 23 3 23 4 00023 '''
print('----d整數(指定長度)----')
print(1, '%10d' % age)
print(2, '%10.1d' % age)
print(3, '%10.2d' % age)
print(4, '%10.5d' % age)
''' 1 23 2 23 3 23 4 00023 '''
print('----f浮點型----') # 浮點型按照小數點後位數算起
print(1, '%f' % height) # 浮點型不指定 默認保留小數點後6位
print(2, '%.1f' % height)
print(3, '%.2f' % height)
print(4, '%.15f' % height)
''' 1 180.400000 2 180.4 3 180.40 4 180.400000000000006 '''
print('----f浮點型(指定長度)----')
print(1, '%10f' % height) # 浮點型不指定 默認保留小數點後6位
print(2, '%10.1f' % height)
print(3, '%10.2f' % height)
print(4, '%10.15f' % height)
''' 1 180.400000 2 180.4 3 180.40 4 180.400000000000006 '''

2.4 【typecode】數據類型

""" @author GroupiesM @date 2022/6/23 16:26 @introduction 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} ${typecode} 【必選】,數據類型、格式 1)傳入"字符串類型"的參數 s,獲取傳入的對象 str() 方法的返回值(字符串-供人閱讀),並將其格式化到指定位置 r,獲取傳入對象的 repr() 方法的返回值(字符串-供解釋器使用),並將其格式化到指定位置 空白,未指定類型,則默認s 2)傳入"整數類型"的參數 c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 --%格式符:沒有b(2進制數字)方法,format格式化可以支持-- d,10進制整數 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文小寫) X,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文大寫) 3)傳入"浮點型或小數類型"的參數 e,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e) E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E) f,將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點後6位) F,同上 g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;) G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;) %,當字符串中存在格式化標志時,需要用 %%表示一個百分號 """
name, age, money, height = '張三', ord('🫡'), -20, 180.4
''' 數據類型${typecode}:【必選】(未測試全部參數) c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置 '''
'''參數c -> 獲取unicode'''
# 獲取🫡的unicode值 : ord('🫡') -> 129761
print('c_1',chr(age)) # 🫡
print('c_2','%c' % age) # 🫡
'''參數o -> 8進制'''
print('o_1', oct(age)) # 0o375341
print('o_2', '%o' % age) # 375341
'''參數x -> 16進制'''
print('x_1', hex(age)) # 0x1fae1
print('x_2', '%x' % age) # 1fae1

2.5 【#】8、16進制符號

""" @author GroupiesM @date 2022/6/23 16:26 @introduction 2.%格式符語法 語法一:'${flags}%${width}${.percision}%${typecode}' % ${content} 語法二:%(${name})${#}${flags}${width}${.precision}%${typecode} % ${
{'k1':v1,'k2':v2,...}} ${#} 【可選】對於八進制(oct)、十六進制(hex),如果加上#,會顯示0o/0x,否則不顯示 """
name, age, money, height = '張三', ord('🫡'), -20, 180.4
''' 8,16進制符號${#}:【可選】 P.S 1.僅對${typecode} in [o,x,X]時生效,但其他情況添加不會報錯 '''
'''參數o -> 8進制'''
print('8_1', oct(age)) # 0o375341
print('8_2', '%#o' % age) # 0o375341
print('8-3', '%o' % age) # 375341
'''參數x -> 16進制'''
print('16_1', hex(age)) # 0x1fae1
print('16_3', '%#x' % age) # 0x1fae1
print('16_2', '%x' % age) # 1fae1

三、str.format()

更多詳細介紹參考:str.Format()語法-官方文檔

""" @author GroupiesM @date 2022/6/24 10:26 @introduction 字符串格式化-方式2 format【推薦】 1.簡介 Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它增強了字符串格式化的功能。 基本語法是通過 {} 和 : 來代替以前的 % format 函數可以接受不限個參數,位置可以不按順序。 2.format格式話語法 語法:'{:${format1}}...{:${format2}}...'.format(${values}) 舉例:'{:>10s}--{:<10s}'.format('hello','python') 結果: hello--python 解讀: {:>10s} 對應 {${format1}} {:<10s} 對應 {${format2}} 'hello','python' 對應 ${values} 。 ${values}與${format}組合有大概6種賦值寫法,這裡只是其中一種 3.${format}的組成 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} ${fill} 【可選】,空白處填充的字符 ${align} 【可選】,對齊方式、正負號,可供選擇的值有:【<、>、=、^】 < : 左對齊 > : 右對齊(默認) = : 內容右對齊,將符號放置在填充字符的左側,且只對數字類型有效。 ^ : 內容居中 ${sign} 【可選】,有無符號數字,可供選擇的值有【+、-、空格】 + : 正號加+,負號加- - : 正號不變,負號加- 空格: 正號空格,符號加- ${#} 【可選】對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 ${width} 【可選】,總長度(不足位數補空格) ${,} 【可選】為數字添加分隔符,如:1,000,000 ${precision} 【可選】,有效位數 ${typecode} 【可選】,數據類型、格式 1)傳入"字符串類型"的參數 s,獲取傳入的對象 str() 方法的返回值(字符串-供人閱讀),並將其格式化到指定位置 r,獲取傳入對象的 repr() 方法的返回值(字符串-供解釋器使用),並將其格式化到指定位置 空白,未指定類型,則默認s 2)傳入"整數類型"的參數 c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 --%格式符:沒有b(2進制數字)方法,format格式化可以支持-- b,獲取傳入對象的 byte() 方法的返回值(2進制數字),並將其格式化到指定位置 d,10進制整數 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文小寫) X,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文大寫) 3)傳入"浮點型或小數類型"的參數 e,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e) E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E) f,將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點後6位) F,同上 g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;) G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;) n,同'g' %,百分比,將數字乘以100,加上百分號,默認保留6位小數 ${content} 【必選】,要格式化的內容 """
'''format格式化 完整語法示例1: 16.9 1) ${fill} = ' ' 空白處填充的字符 2) ${align} = '>' 右對齊(默認) 3) ${sign} = '+' 正號加+,負號加- 4) ${width} = '10' 總長度(不足位數補${fill}) 5) ${.precision} = '5',有效位數 6) ${typecode} = 'f',數據類型float '''
print('{: >+010.5f}'.format(16.9)) # +16.90000
'''format格式化 完整語法示例2: 10000 1) ${fill} = ' ' 空白處填充的字符 2) ${align} = '>' 右對齊(默認) 3) ${sign} = '+' 正號加+,負號加- 4) ${#} 對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 5) ${width} = '10' 總長度(不足位數補${fill}) 6) ${.precision} = '5',有效位數 7) ${typecode} = 'o',數據類型octonary(二進制) '''
print('{: >+#10o}'.format(10000)) # +0o23420
'''format格式化 完整語法示例3: 1850000 1) ${fill} = ' ' 空白處填充的字符 2) ${align} = '>' 右對齊(默認) 3) ${sign} = '+' 正號加+,負號加- 4) ${#} 對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 5) ${width} = '14' 總長度(不足位數補${fill}) 6) ${,} = ',' 為數字添加分隔符,如:1,000,000 7) ${.precision} = '2',有效位數 8) ${typecode} = 'f',數據類型float '''
print('{: >+#14.2f}'.format(18500.05432)) # +18500.05
print('{: >+#14,.2f}'.format(18500.05432)) # +18,500.05
'''測試結果:可以看到總長度14,數字分隔符${,}也算入了總長度 +1850000 +1,850,000 '''
format 格式
""" @author GroupiesM @date 2022/6/24 17:40 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
''' format格式${format}:【可選】 P.S 1.以下幾種情況的${format}添加位置不同 2.使用 對齊方式${fill} 做測試對比 '''
site_dict, my_list = {
"name": "菜鳥教程", "url": "www.runoob.com"}, ['菜鳥教程', 'www.runoob.com']
name, age, height = '張三', 20, 180.4
'''1.1 不設置指定位置,按默認順序 1.1a 我叫張三,我叫張三,今年20歲,身高180.4 1.1b 我叫***張三,我叫***張三,今年***20歲,身高180.4 '''
print('1.1a', '我叫{},我叫{},今年{}歲,身高{}'.format(name, name, age, height))
print('1.1b', '我叫{:*>5},我叫{:*>5},今年{:*>5}歲,身高{:*>5}'.format(name, name, age, height)) # 居右,長度5,填充*
'''1.2 設置指定位置 {0}、{1} 1.2a 我叫張三,我叫張三,今年20歲,身高180.4 1.2b 我叫@張三@@,我叫@張三@@,今年@[email protected]@歲,身高180.4 '''
print('1.2a', '我叫{0},我叫{0},今年{1}歲,身高{2}'.format(name, age, height))
print('1.2b', '我叫{0:@^5},我叫{0:@^5},今年{1:@^5}歲,身高{2:@^5}'.format(name, age, height)) # 居中,長度5,填充@
'''1.3 設置參數 {name}、{url} 1.3a 網站名:菜鳥教程, 地址 www.runoob.com,利潤-123 1.3b 網站名:菜鳥教程, 地址 www.runoob.com,利潤-$$123 1.3c 網站名:菜鳥教程, 地址 www.runoob.com,利潤$$-123 '''
print('1.3a', '網站名:{name}, 地址 {url},利潤{profit}'.format(name="菜鳥教程", url="www.runoob.com", profit=-123))
print('1.3b','網站名:{name}, 地址 {url},利潤{profit:$=6}'.format(name="菜鳥教程", url="www.runoob.com", profit=-123)) # =右對齊,僅適用於數字
print('1.3c','網站名:{name}, 地址 {url},利潤{profit:$>6}'.format(name="菜鳥教程", url="www.runoob.com", profit=-123)) # >右對齊2,長度6,填充$
'''2.1 通過字典dict設置參數 2.1a 網站名:菜鳥教程, 地址 www.runoob.com 2.1b 網站名:菜鳥教程 , 地址 www.runoob.com '''
print('2.1a', "網站名:{name}, 地址 {url}".format(**site_dict))
print('2.1b', "網站名:{name:<5}, 地址 {url:<5}".format(**site_dict)) # 居左,長度5,填充空格
'''2.2 通過列表list索引設置參數 2.2a 網站名:菜鳥教程, 地址 www.runoob.com 2.2b 網站名:菜鳥教程🫤, 地址 www.runoob.com '''
print('2.2a', "網站名:{}, 地址 {}".format(*my_list))
print('2.2b', "網站名:{:🫤<5s}, 地址 {:🫤<5s}".format(*my_list)) # 居左,長度5,填充🫤
'''2.3 通過列表list索引設置參數 2.3a 網站名:菜鳥教程, 地址 www.runoob.com 2.3b 網站名:菜鳥教程, 地址 www.runoob.com '''
print('2.3a', "網站名:{0[0]}, 地址 {0[1]}".format(my_list))
print('2.3b', "網站名:{0[0]:<5s}, 地址 {0[1]:<5s}".format(my_list)) # 居左,長度5,填充

3.1 【fill】填充字符

""" @author GroupiesM @date 2022/6/24 16:56 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height, = '張三', 20, -20, 180.4
''' 填充字符${fill}:【可選】 P.S 1.${fill} 的前提是 ${align},否則報錯 2.${align} 的前提是 ${width} ,不指定不會報錯,但對齊方式不會生效 3.${fill} 只能指定一位 4.${fill} 不指定時,默認為空格 5.內容長度<${width}時,觸發填充動作;反之不執行任何操作 '''
print('1', '我叫{},我叫{},今年{}歲,身高{}'.format(name, name, age, height, ))
print('2', '我叫{:>5},我叫{:>5},今年{:>5}歲,身高{:>5}'.format(name, name, age, height, )) # 居右,長度5,不指定填充
print('3', '我叫{:*>5},我叫{:*>5},今年{:*>5}歲,身高{:*>5}'.format(name, name, age, height, )) # 居右,長度5,填充*
print('4', '我叫{:*>5},我叫{:>5},今年{:>5}歲,身高{:>5}'.format(name, name, age, height, )) # 居右,長度5,填充
'''測試結果 1 我叫張三,我叫張三,今年20歲,身高180.4 2 我叫 張三,我叫 張三,今年 20歲,身高180.4 3 我叫***張三,我叫***張三,今年***20歲,身高180.4 4 我叫***張三,我叫張三,今年20歲,身高180.4 '''

3.2 【align】對齊方式

""" @author GroupiesM @date 2022/6/24 16:57 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height, = '張三', 20, -20, 180.4
''' 對齊方式${align}:【可選】 < : 左對齊 > : 右對齊(默認) = : 內容右對齊,將符號放置在填充字符的左側,且只對數字類型有效。 ^ : 內容居中 P.S 1.不同語法格式的添加位置不同,下面會依次測試 2.${align} 的前提是 ${width} ,不指定不會報錯,但對齊方式不會生效 3.${align} 中的右對齊(=),僅對數字類型有效,參數類型錯誤會報錯 '''
'''字符型string 1 我叫 張三 2 我叫張三 4 我叫 張三 '''
print('1', '我叫{:>5}'.format(name))
print('2', '我叫{:<5}'.format(name))
# print('3', '我叫{:=5}'.format(name)) # = 僅對數字類有效
print('4', '我叫{:^5}'.format(name))
'''數字型int 1 余額 -20 2 余額-20 3 余額- 20 4 余額 -20 '''
print('1', '余額{:>5}'.format(money))
print('2', '余額{:<5}'.format(money))
print('3', '余額{:=5}'.format(money)) # = 僅對數字類有效
print('4', '余額{:^5}'.format(money))

3.3 【sign】數字正負號

""" @author GroupiesM @date 2022/6/24 16:57 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height = '張三', 20, -20, 180.4
''' 數字正負號${sign}:【可選】 + : 正號加+,負號加- - : 正號不變,負號加- 空格: 正號空格,符號加- P.S 1.不同語法格式的添加位置不同,下面會依次測試 2.${align} 的前提是 ${width} ,不指定不會報錯,但對齊方式不會生效 3.${sign} 僅對數字類型有效,參數類型錯誤會報錯 '''
print('1', '年齡{:},余額{:}'.format(age, money))
print('2', '年齡{:+},余額{:+}'.format(age, money))
print('3', '年齡{:-},余額{:-}'.format(age, money))
print('4', '年齡{: },余額{: }'.format(age, money))
print('5', '年齡{:$>+10},余額{:$>+10}'.format(age, money))
'''測試結果 1 年齡20,余額-20 2 年齡+20,余額-20 3 年齡20,余額-20 4 年齡 20,余額-20 5 年齡$$$$$$$+20,余額$$$$$$$-20 '''

3.4 【width】總長度

""" @author GroupiesM @date 2022/6/24 16:58 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height = '張三', 20, -2.4, 180.4
''' 總長度${width}:【可選】 %s 不指定長度 %1s ${width} < 字符長度,不生效 %2s ${width} = 字符長度,不生效 %10 ${width} > 字符長度,生效 P.S 1. 不指定${align}默認為">",右對齊 2. 不指定${fill} 默認為"空格" 3. 負數中的"-"也計算入總長度中,長度為1 4. 浮點類型點的"."也計算入總長度中,長度為1 '''
print('1', '{}'.format(money))
print('2', '{:1}'.format(money))
print('3', '{:2}'.format(money))
print('4', '{:3}'.format(money))
print('5', '{:4}'.format(money))
print('6', '{:5}'.format(money)) # "-2.4" 字符長度為4,指定${width}>=5時才會觸發填充操作
'''測試結果 1 -2.4 2 -2.4 3 -2.4 4 -2.4 5 -2.4 6 -2.4 '''

3.5 【,】數字分隔符

""" @author GroupiesM @date 2022/6/24 16:58 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height = '張三', 20, 100000, 11240980.456789657
''' 數字分隔符${,}:【可選】 為數字添加分隔符,如:1,000,000 P.S 1. typecode為整數、浮點類型時才可以添加 2. 小數點前每隔3位數字自動添加一個, '''
print('1', '{:,}'.format(money))
print('3', '{:,}'.format(height))
print('3', '{:,.11}'.format(height))
'''測試結果 1 100,000 3 11,240,980.456789657 3 11,240,980.457 '''

3.6 【percision】有效位數

""" @author GroupiesM @date 2022/6/24 16:59 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
''' 有效位數${.precision}:【可選】 1.字符串:'張三',${.precision}會截取字符串 %s 不指定${precision} %.1s ${.precision} < 字符長度,從左到右截取1位 '張' %.2s ${.precision} = 字符長度,不生效 %.10 ${.precision} > 字符長度,不生效 2.整數:'23',${.precision},-str.format()不支持給整數指定${percision}。(%-formatting可以給整數指定${percision}) 3.浮點型 '180.45',${precision}表示有效位數(其中浮點型表示:小數點後位數),默認${precision}=6 %f 不指定${precision},保留6位小數 '180.450000' %.1f ${.precision} < 字符長度,保留1位小數 '180.4' %.2f ${.precision} = 字符長度,保留2位小數 '180.45' %.15f ${.precision} > 字符長度,保留15位小數 '180.449999999999989' '''
print('----s字符串----')
name = '張三'
print(1, '{:}'.format(name))
print(2, '{:.1}'.format(name))
print(3, '{:.2}'.format(name))
print(4, '{:.10}'.format(name))
''' 1 張三 2 張 3 張三 4 張三 '''
print('----s字符串(指定長度)----')
name = '張三'
print(1, '{:10}'.format(name))
print(2, '{:10.1}'.format(name))
print(3, '{:10.2}'.format(name))
print(4, '{:10.10}'.format(name))
''' 1 張三 2 張 3 張三 4 張三 '''
print('----f浮點型----') # 浮點型按照小數點後位數算起
height = 180.4
print(1, '{:f}'.format(height)) # # 浮點型不指定 默認保留小數點後6位
print(2, '{:.1f}'.format(height))
print(3, '{:.2f}'.format(height))
print(4, '{:.10f}'.format(height))
''' 1 180.400000 2 180.4 3 180.40 4 180.4000000000 '''
print('----f浮點型(指定長度)----')
print(1, '{:10f}'.format(height)) # 浮點型不指定 默認保留小數點後6位
print(2, '{:10.1f}'.format(height))
print(3, '{:10.2f}'.format(height))
print(4, '{:10.10f}'.format(height))
''' 1 180.400000 2 180.4 3 180.40 4 180.4000000000 '''

3.7 【#】2,8,16進制符號

""" @author GroupiesM @date 2022/6/24 16:58 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} """
name, age, money, height = '張三', 20, -20, 180.4
''' 2,8,16進制符號${#}:【可選】 P.S 1.僅對${typecode} in [b,o,x,X] 時生效,但其他情況添加不會報錯 '''
'''2進制'''
print('{:b}'.format(age)) # 10100
print('{:#b}'.format(age)) # 0b10100
'''8進制'''
print('{:o}'.format(age)) # 24
print('{:#o}'.format(age)) # 0o24
'''16進制'''
print('{:x}'.format(age)) # 14
print('{:#x}'.format(age)) # 0x14

3.8 【typecode】數據類型

""" @author GroupiesM @date 2022/6/24 16:59 @introduction 1) ${value}為字符類型時 - (沒有${sign}和${,}) ${fill}${align}${#}${width}${.percision}%${typecode} 2) ${value}為整數類型時 - (沒有${.percision}) ${fill}${align}${sign}${#}${width}${,}%${typecode} 3) ${value}為浮點型時 ${fill}${align}${sign}${#}${width}${,}${.percision}%${typecode} ${typecode} 【必選】,數據類型、格式 1)傳入"字符串類型"的參數 s,獲取傳入的對象 str() 方法的返回值(字符串-供人閱讀),並將其格式化到指定位置 r,獲取傳入對象的 repr() 方法的返回值(字符串-供解釋器使用),並將其格式化到指定位置 空白,未指定類型,則默認s 2)傳入"整數類型"的參數 c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 --%格式符:沒有b(2進制數字)方法,format格式化可以支持-- b,獲取傳入對象的 byte() 方法的返回值(2進制數字),並將其格式化到指定位置 d,10進制整數 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文小寫) X,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置(英文大寫) 3)傳入"浮點型或小數類型"的參數 e,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(小寫e) E,將整數、浮點數轉換成科學計數法,並將其格式化到指定位置(大寫E) f,將整數、浮點數轉換成浮點數表示,並將其格式化到指定位置(默認保留小數點後6位) F,同上 g,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是e;) G,自動調整將整數、浮點數轉換成 浮點型或科學計數法表示(超過6位數用科學計數法),並將其格式化到指定位置(如果是科學計數則是E;) n,同'g' %,百分比,將數字乘以100,加上百分號,默認保留6位小數 """
name, age, money, height = '張三', ord('🫡'), -20, 180.4
''' 數據類型${typecode}:【可選】(未測試全部參數) 空白,不填默認為s,字符串類型 c,獲取傳入對象的 chr() 方法的返回值(unicode對應值),10進制范圍為0 <= i <=1114111 o,獲取傳入對象的 oct() 方法的返回值(8進制數字),並將其格式化到指定位置 x,獲取傳入對象的 hex() 方法的返回值(16進制數字),並將其格式化到指定位置 '''
'''參數不填 -> 字符默認為s、整數默認為d、浮點默認為g'''
print(' _1', age) # 129761
print(' _2','{:}'.format(age)) # 129761
'''參數b -> 2進制'''
print('b_1', bin(age)) # 0b11111101011100001
print('b_2','{:b}'.format(age)) # 11111101011100001
'''參數o -> 8進制'''
print('o_1', oct(age)) # 0o375341
print('o_2','{:o}'.format(age)) # 375341
'''參數x -> 16進制'''
print('x_1', hex(age)) # 0x1fae1
print('x_2','{:x}'.format(age)) # 1fae1

3.9 %-formatting 對比 str.format()

""" @author GroupiesM @date 2022/6/27 11:06 @introduction 大部分情況下,%格式符合format格式化都能實現相同功能,以下案例中使用兩種格式輸出相同格式結果 但也有些不同的地方:關於測試出的不同點總結如下: 1) ${typecode}='b':表示二進制 %:不支持 format:支持 2) ${typecode}='':空白不填 %:不支持 format:支持,不填默認為s(字符串) 3) ${.percision}: %:整數時添加${.percision},表示有效位數 format:整數時不可以添加 4) ${fill}:手動指定分隔符 %:不支持 format:支持 5) ${,}:為數字添加分隔符,如:1,000,000 %:不支持 format:支持 """
'''%格式符 完整語法示例1: 16.9 1) ${flag} = '+' 右對齊:正數的加正號,負數的加負號 2) ${width} = '10' 總長度(不足位數補空格) 3) ${precision} = '5',有效位數 4) ${typecode} = 'f',數據類型float '''
print('%(money)+10.5f' % {
'money': 16.9}) # +16.90000
'''format格式化 完整語法示例1: 16.9 1) ${fill} = ' ' 空白處填充的字符 2) ${align} = '>' 右對齊(默認) 3) ${sign} = '+' 正號加+,負號加- 4) ${width} = '10' 總長度(不足位數補${fill}) 5) ${precision} = '5',有效位數 6) ${typecode} = 'f',數據類型float '''
print('{: >+010.5f}'.format(16.9)) # +16.90000
'''%格式符 完整語法示例2: 10000 1) ${flag} = + 右對齊:正數的加正號,負數的加負號 2) ${#} 對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 3) ${width} = 10 總長度(不足位數補空格) 4) ${precision} = 5,有效位數 5) ${typecode} = f,數據類型float '''
print('%(money)#+10o' % {
'money': 10000}) # +0o23420
'''format格式化 完整語法示例2: 10000 1) ${fill} = ' ' 空白處填充的字符 2) ${align} = '>' 右對齊(默認) 3) ${sign} = '+' 正號加+,負號加- 4) ${#} 對於二進制(bin)、八進制(oct)、十六進制(hex),如果加上#,會顯示0b/0o/0x,否則不顯示 5) ${width} = '10' 總長度(不足位數補${fill}) 6) ${precision} = '5',有效位數 7) ${typecode} = 'f',數據類型float '''
print('{: >+#10o}'.format(10000)) # +0o23420

四、f-String

語法詳細介紹參考:PEP 3101 – 高級字符串格式化

累了,不想測了


22/06/28

M


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved