一、format的基本玩法
????一、什么是format
format是字串內嵌(字串內嵌:字串中再嵌套字串,加入雙引號或單引號)的一個方法,用于格式化字串,以大括號{}來標明被替換的字串
????format玩法一:按順序輸出(按照{}的順序依次匹配括號中的值)
>>>s = '年齡 {} ,愛好{},性別 {}'.format(18,'發呆','男')
>>>print(s)
年齡18,愛好發呆,性別男
????format玩法二:按索引輸出
當資料多個重復的時候按索引來:例如以下代碼愛好和喜歡相同(都是發呆)且發呆對應索引是1,所以大括號里可以用1來指向要被替換資料(發呆)在format()中的索引
>>>s = '年齡 {0} ,愛好{1},性別 {2},喜歡{1}'.format(18,'發呆','男')
>>>print(s)
年齡18,愛好發呆,性別男,喜歡發呆
????format玩法三:通過引數名來匹配引數(也叫做使用關鍵字傳遞引數)
``` >>>hobby = input('請輸入你的愛好:') >>>s = '年齡{age},愛好{hobby},性別{sex}'.format(hobby = hobby,sex = 男,age = 18) >>>print(s) 請輸入你的愛好:發呆 年齡18,愛好發呆,性別男 ``` ##????format玩法四:通過默認,引數名來混搭進行使用 代碼一:
hobby = input('請輸入你的愛好:')
s = '愛好{hobby},性別{}'.format('男',hobby = hobby)
print(s)、
輸出結果
愛好發呆,性別男
????format玩法需要注意的常見錯誤(切記,切記)
?錯誤一? 代碼一如果寫成以下代碼就會報錯:仔細觀察代碼二與代碼一的區別
代碼二:
hobby = input('請輸入你的愛好:')
s = '愛好{hobby},性別{}'.format(hobby = hobby,'男')
print(s)
報錯如下:
s = '愛好{hobby},性別{}'.format(hobby = hobby,'男')
^
SyntaxError: positional argument follows keyword argument
為什么我們將.format(hobby = hobby , '男')更改為.format('男' , hobby = hobby)
就會報錯呢??
??那是因為命名的引數(變數)必須寫到最后,否則會編譯報錯??hobby是我們命名的一個引數所以必須放在最后,
?錯誤二?
????不可以索引和默認格式化混合使用:
所以以下代碼均會報錯:
>>>s = '愛好{},性別{1}'.format('發呆','男')
>>>print(s)
報以下錯誤:
ValueError: cannot switch from automatic field numbering to manual field specification
>>>s = '愛好{},性別{0}'.format('男','發呆')
>>>print(s)
報以下錯:
ValueError: cannot switch from automatic field numbering to manual field specification
二、format的進階玩法
????玩法五、通過物件的屬性(詳細見代碼注釋)
首先我們定義一個函式Names()在函式內定義一個區域變數a
>>>def Names():
>>> a = '周周'
#然后將 a 呼叫出來做為關鍵字傳參
>>>s = '我叫{names.a}'.format(names = Names)
我叫周周
????玩法六、支持對引數部分參考
可以通過索引對引數的部分進行取值,如:s = '1男生1'我們只需要'男'這一部分我們就可以采用切片s[1]將其切出,再傳遞到對應部分,
>>>char = '性別{s[1]}'.format(s = '1男生1')
>>>print(char)
性別男
????玩法七、使用format 使結果保留兩位小數
一般需要使用 (:. 2f),在用%進行格式化時我們使用的是(%.2f )??操作方法如下:
>>>s1 = 'π是{:.2f}'.format(3.1415926)
>>>print(s1)
>>>s2 = 'π是%.2f'% 3.1415926
>>>print(s2)
π是3.14
π是3.14
同時這種方法還可以用于字串截取,不過數字后面就不能加f了??操作方法如下??
#{:1}指截取索引為[0:1]的字符(顧頭不顧尾)
s = '性別{:.1}'.format('男生122')
#{:2}指截取索引為[0:2]的字符(顧頭不顧尾)
m = '性別{:.2}'.format('男生122')
print(s)
print(m)
性別男
性別男生
????玩法八、 format中格式的處理
在占位符中還可以有格式化控制符,對字串的格式進行更加精準 的控制,格式化控制符位于占位符索引或占位符名字的后面,之間用冒號分隔,語法:{引數序號:格式控制符}或{引數名:格式控制符},字串的格式化控制符及其說明如下表所示:

??操作方法如下表:??

>>> format(3.1415936)
'3.1415936'
>>> str(3.1415926)
'3.1415926'
#字串可以提供的引數,指定對齊方式,<是左對齊, >是右對齊,^是居中對齊
>>>print(format('test', '<20'))
>>>print(format('test', '>20'))
>>>print(format('test', '^20'))
test
test
test
#整形數值可以提供的引數有 'b' 'c' 'd' 'o' 'x' 'X' 'n' None
>>> format(3,'b') #轉換成二進制
'11'
>>> format(97,'c') #轉換unicode成字符
'a'
>>> format(11,'d') #轉換成10進制
'11'
>>> format(11,'o') #轉換成8進制
'13'
>>> format(11,'x') #轉換成16進制 小寫字母表示
'b'
>>> format(11,'X') #轉換成16進制 大寫字母表示
'B'
>>> format(11,'n') #和d一樣
'11'
>>> format(11) #默認和d一樣
'11'
#浮點數可以提供的引數有 'e' 'E' 'f' 'F' 'g' 'G' 'n' '%' None
>>> format(314159267,'e') #科學計數法,默認保留6位小數
'3.141593e+08'
>>> format(314159267,'0.2e') #科學計數法,指定保留2位小數
'3.14e+08'
>>> format(314159267,'0.2E') #科學計數法,指定保留2位小數,采用大寫E表示
'3.14E+08'
>>> format(314159267,'f') #小數點計數法,默認保留6位小數
'314159267.000000'
>>> format(3.14159267000,'f') #小數點計數法,默認保留6位小數
'3.141593'
>>> format(3.14159267000,'0.8f') #小數點計數法,指定保留8位小數
'3.14159267'
>>> format(3.14159267000,'0.10f') #小數點計數法,指定保留10位小數
'3.1415926700'
>>> format(3.14e+1000000,'F') #小數點計數法,無窮大轉換成大小字母
'INF'
#g的格式化比較特殊,假設p為格式中指定的保留小數位數,先嘗試采用科學計數法格式化,得到冪指數exp,如果-4<=exp<p,則采用小數計數法,并保留p-1-exp位小數,否則按小數計數法計數,并按p-1保留小數位數
>>> format(0.00003141566,'.1g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科學計數法計數,保留0位小數點
'3e-05'
>>> format(0.00003141566,'.2g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科學計數法計數,保留1位小數點
'3.1e-05'
>>> format(0.00003141566,'.3g') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科學計數法計數,保留2位小數點
'3.14e-05'
>>> format(0.00003141566,'.3G') #p=1,exp=-5 ==》 -4<=exp<p不成立,按科學計數法計數,保留0位小數點,E使用大寫
'3.14E-05'
>>> format(3.1415926777,'.1g') #p=1,exp=0 ==》 -4<=exp<p成立,按小數計數法計數,保留0位小數點
'3'
>>> format(3.1415926777,'.2g') #p=1,exp=0 ==》 -4<=exp<p成立,按小數計數法計數,保留1位小數點
'3.1'
>>> format(3.1415926777,'.3g') #p=1,exp=0 ==》 -4<=exp<p成立,按小數計數法計數,保留2位小數點
'3.14'
>>> format(0.00003141566,'.1n') #和g相同
'3e-05'
>>> format(0.00003141566,'.3n') #和g相同
'3.14e-05'
>>> format(0.00003141566) #和g相同
'3.141566e-05'
???? 玩法九、字符填充
可通過(: 符號^數字)進行字串的填充, 其中數字為填充后的字串總長度操作如下:
s = "{:*^10}".format('12345')
print(s)
**12345***
s = "{:-^20}".format('123456')
print(s)
-------123456-------
但是如果數字{要求的長度}小于字串的長度,則不進行填充操作,
#這里要求字串的長度是3,但是已經是5了,所以不會填充
s = "{:*^3}".format('12345')
print(s)
12345
???? 玩法十:對串列(list)、字典(dic)的拆分
在format格式化時,可使用* 或者 ** 進行對list、dic拆分,
foods = ['魚', '蝦', '肉']
s = '我愛吃{}和{}和{}'.format(*foods)
print(s)
我愛吃魚和蝦和肉
foods = ['魚', '蝦', '肉']
s = '我愛吃{2}和{0}和{1}'.format(*foods)
print(s)
我愛吃魚和蝦和肉
dict_temp = {'愛好':'發呆','姓名':'周周'}
# 字典需要用 ** 進行拆分
s = '我叫{姓名},愛好{愛好}'.format(**dict_temp)
print(s)
我叫周周,愛好發呆
結語:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/506013.html
標籤:其他
上一篇:day34-IO流01
