日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

 copy_left 2019-09-14

為什么字需要格式化輸出呢?

如果你需要將文本和數(shù)字拼接起來像這樣:

a=15

print('你好,你今年'+str(a)+'歲了嗎')

像這樣是不是很麻煩,現(xiàn)在我們只是傳入了一個變量,如果我們有很多變量:

age=20

name='aaa'

country='China'

city='Beijing'

print('我的名字是'+name+'今年'+str(age)+'歲了,'+'我住在'+country+city+',一個很美麗的城市')

是不是太麻煩了,還很容易出錯,但是python提供了一個格式化輸出的方法,不見簡化了代碼,更有利于閱讀,更方便了編程人員編寫代碼,效率提升明顯。


格式化輸出方法一:%

%方法的語法:

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

支持的方法:

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

先來看幾個簡單的例子:

s1 = 'i am %s, i am %d years old' % ('jeck',26) #按位置順序依次輸出

s2 = 'i am %(name)s, i am %(age)d years old' % {'name':'jeck','age':26} #自定義key輸出

s3 = 'i am %(name)+10s, i am %(age)d years old, i am %(height).2f' % {'name':'jeck','age':26,'height':1.7512} #定義名字寬度為10,并右對齊.定義身高為浮點類型,保留小數(shù)點2位

s4 = '原數(shù): %d, 八進(jìn)制:%o , 十六進(jìn)制:%x' % (15,15,15) #八進(jìn)制\十六進(jìn)制轉(zhuǎn)換

s5 = '原數(shù):%d, 科學(xué)計數(shù)法e:%e, 科學(xué)計數(shù)法E:%E' %(1000000000,1000000000,1000000000) #科學(xué)計數(shù)法表示

s6 = '百分比顯示:%.2f %%' % 0.75 #百分號表示

格式化輔助命令:

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

實例:

%s

1、%s打印時結(jié)果是hello

string = 'hello'

print('string=%s' % string) # output: string=hello

2、%2s意思是字符串長度為2,當(dāng)原字符串的長度超過2時,按原長度打印,所以%2s的打印結(jié)果還是hello

print('string=%2s' % string) # output: string=hello

3、%7s意思是字符串長度為7,當(dāng)原字符串的長度小于7時,在原字符串左側(cè)補(bǔ)空格,

所以%7s的打印結(jié)果是 hello

print('string=%7s' % string) # output: string= hello

4、%-7s意思是字符串長度為7,當(dāng)原字符串的長度小于7時,在原字符串右側(cè)補(bǔ)空格,

# 所以%-7s的打印結(jié)果是 hello

print('string=%-7s!' % string) # output: string=hello !

5、 %.2s意思是截取字符串的前2個字符,所以%.2s的打印結(jié)果是he

print('string=%.2s' % string) # output: string=he

6、%.7s意思是截取字符串的前7個字符,當(dāng)原字符串長度小于7時,即是字符串本身,

# 所以%.7s的打印結(jié)果是hello

print('string=%.7s' % string) # output: string=hello

7、%a.bs這種格式是上面兩種格式的綜合,首先根據(jù)小數(shù)點后面的數(shù)b截取字符串,

# 當(dāng)截取的字符串長度小于a時,還需要在其左側(cè)補(bǔ)空格

print('string=%7.2s' % string) # output: string= he

print('string=%2.7s' % string) # output: string=hello

print('string=%10.7s' % string) # output: string= hello

8、還可以用%*.*s來表示精度,兩個*的值分別在后面小括號的前兩位數(shù)值指定

print('string=%*.*s' % (7, 2, string)) # output: string= he

%d

1、%d打印時結(jié)果是14

num = 14

print('num=%d' % num) # output: num=14

2、%1d意思是打印結(jié)果為1位整數(shù),當(dāng)整數(shù)的位數(shù)超過1位時,按整數(shù)原值打印,所以%1d的打印結(jié)果還是14

print('num=%1d' % num) # output: num=14

3、%3d意思是打印結(jié)果為3位整數(shù),當(dāng)整數(shù)的位數(shù)不夠3位時,在整數(shù)左側(cè)補(bǔ)空格,所以%3d的打印結(jié)果是 14

print('num=%3d' % num) # output: num= 14

4、%-3d意思是打印結(jié)果為3位整數(shù),當(dāng)整數(shù)的位數(shù)不夠3位時,在整數(shù)右側(cè)補(bǔ)空格,所以%3d的打印結(jié)果是14_

print('num=%-3d' % num) # output: num=14_

5、%05d意思是打印結(jié)果為5位整數(shù),當(dāng)整數(shù)的位數(shù)不夠5位時,在整數(shù)左側(cè)補(bǔ)0,所以%05d的打印結(jié)果是00014

print('num=%05d' % num) # output: num=00014

6、%.3d小數(shù)點后面的3意思是打印結(jié)果為3位整數(shù),

# 當(dāng)整數(shù)的位數(shù)不夠3位時,在整數(shù)左側(cè)補(bǔ)0,所以%.3d的打印結(jié)果是014

print('num=%.3d' % num) # output: num=014

7、 %.0003d小數(shù)點后面的0003和3一樣,都表示3,意思是打印結(jié)果為3位整數(shù),

# 當(dāng)整數(shù)的位數(shù)不夠3位時,在整數(shù)左側(cè)補(bǔ)0,所以%.3d的打印結(jié)果還是014

print('num=%.0003d' % num) # output: num=014

8、%5.3d是兩種補(bǔ)齊方式的綜合,當(dāng)整數(shù)的位數(shù)不夠3時,先在左側(cè)補(bǔ)0,還是不夠5位時,再在左側(cè)補(bǔ)空格,

規(guī)則就是補(bǔ)0優(yōu)先,最終的長度選數(shù)值較大的那個,所以%5.3d的打印結(jié)果還是 014

print('num=%5.3d' % num) # output: num= 014

9、%05.3d是兩種補(bǔ)齊方式的綜合,當(dāng)整數(shù)的位數(shù)不夠3時,先在左側(cè)補(bǔ)0,還是不夠5位時,

# 由于是05,再在左側(cè)補(bǔ)0,最終的長度選數(shù)值較大的那個,所以%05.3d的打印結(jié)果還是00014

print('num=%05.3d' % num) # output: num=00014

10、還可以用%*.*d來表示精度,兩個*的值分別在后面小括號的前兩位數(shù)值指定

# 如下,不過這種方式04就失去補(bǔ)0的功能,只能補(bǔ)空格,只有小數(shù)點后面的3才能補(bǔ)0

print('num=%*.*d' % (0, 3, num)) # output: num= 014

%f

import math

%a.bf,a表示浮點數(shù)的打印長度,b表示浮點數(shù)小數(shù)點后面的精度

1、只是%f時表示原值,默認(rèn)是小數(shù)點后5位數(shù)

print('PI=%f' % math.pi) # output: PI=3.141593

2、只是%9f時,表示打印長度9位數(shù),小數(shù)點也占一位,不夠左側(cè)補(bǔ)空格

print('PI=%9f' % math.pi) # output: PI=_3.141593

3、只有.沒有后面的數(shù)字時,表示去掉小數(shù)輸出整數(shù),03表示不夠3位數(shù)左側(cè)補(bǔ)0

print('PI=%03.f' % math.pi) # output: PI=003

4、%6.3f表示小數(shù)點后面精確到3位,總長度6位數(shù),包括小數(shù)點,不夠左側(cè)補(bǔ)空格

print('PI=%6.3f' % math.pi) # output: PI=_3.142

5、%-6.3f表示小數(shù)點后面精確到3位,總長度6位數(shù),包括小數(shù)點,不夠右側(cè)補(bǔ)空格

print('PI=%-6.3f' % math.pi) # output: PI=3.142_

6、 還可以用%*.*f來表示精度,兩個*的值分別在后面小括號的前兩位數(shù)值指定

如下,不過這種方式06就失去補(bǔ)0的功能,只能補(bǔ)空格

print('PI=%*.*f' % (6, 3, math.pi)) # output: PI=_3.142

格式化輸出方法二:{}.format

format()方法優(yōu)點如下:

  • 不需要關(guān)注數(shù)據(jù)類型,而在%方法中%s只能替代字符串類型
  • 單個參數(shù)可以多次輸出,參數(shù)順序可以不相同
  • 填充方式十分靈活,對齊方式十分強(qiáng)大
  • 官方推薦用的方式,%方式將會在后面的版本被淘汰

先看幾個簡單的例子:

f1 = 'i am {0}, i am {1}d years old'.format('Jeck',26) #采用位置參數(shù)來索引

f2 = 'i am {name}, i am {age}d years old'.format(**{'name':'jeck','age':26}) #采用自定義key來縮影,此時**表示將字典的k/v取出

f3 = '--{name:*^10s}-- =={age:<10.2f}=='.format(name='Jeck',age=26.457) #將name的寬度設(shè)置為10,空余的使用*號不全,并居中顯示,age類型設(shè)置為浮點型,寬度為10.并左對齊

f4 = '原數(shù):{:d} 二進(jìn)制:{:b}, 八進(jìn)制:{:o}, 十六進(jìn)制x:{:x},十六進(jìn)制X:{:X}'.format(15, 15, 15, 15, 15) #進(jìn)制轉(zhuǎn)換

f5 = '原數(shù):{:d}, 科學(xué)計數(shù)法e:{:e}, 科學(xué)計數(shù)法E:{:E}' .format(1000000000,1000000000,1000000000) #科學(xué)計數(shù)法表示

f6 = '原數(shù):{:2F}, 百分號表示{:.2%}, 原數(shù):{:d},自動分割表示:{:,}'.format(0.75,0.7584,10000000,10000000 ) #百分號表示及自動分割

支持的種類也非常的多:

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

知識點講解:

順序匹配:

hello {}, my name is {}'.format('everyone', 'python')

自定義順序匹配:

  • 可以通過數(shù)字形式的簡單字段名傳遞位置參數(shù)。
  • 數(shù)字必須是大于等于 0 的整數(shù)。
  • 帶數(shù)字的替換字段可以重復(fù)使用。
  • 數(shù)字形式的簡單字段名相當(dāng)于把 format 中的所有位置參數(shù)整體當(dāng)作一個元組,通過字段名中的數(shù)字進(jìn)行取值。即 {0} 等價于 tuple[0],所以花括號內(nèi)的數(shù)字不能越界。
'hello {1}, my name is {0}'.format('python', 'everyone')

鍵值匹配:

關(guān)鍵字參數(shù)的位置可以隨意調(diào)換。

'hello {a}, my name is '.format(a='everyone', b='python')

字典方式匹配:在字典前面加上**,并傳入format()函數(shù)實現(xiàn)。

x = {'a':'everyone', 'b':'python'}

'hello {a}, my name is '.format(**x)

對齊方式和填充:

我把python格式化輸出的所有資料都整理到了一起,確定不收藏?

format也是小編推薦的格式化方式,將來%也勢必想會被format取代。

實例:

1、最簡單的使用方法:

print('我叫{},今年{}歲。'.format('小明', 18))

我叫小明,今年18歲。

花括號個數(shù)可以少于位置參數(shù)的個數(shù)

print('我愛吃{}和{}。'.format('香蕉', '蘋果', '大鴨梨'))

我愛吃香蕉和蘋果。

2、數(shù)字形式的簡單字段名

通過數(shù)字形式的簡單字段名傳遞位置參數(shù)

print('身高{0},家住{1}。'.format(1.8, '銅鑼灣'))

身高1.8,家住銅鑼灣

數(shù)字形式的簡單字段名可以重復(fù)使用。

print('我愛{0}。\n她今年{1}。\n{0}也愛我。'.format('阿香', 17))

我愛阿香。

她今年17。

阿香也愛我。

體會把所有位置參數(shù)整體當(dāng)成元組來取值

print('阿香愛吃{1}、{3}和{0}。'.format('榴蓮', '臭豆腐', '皮蛋', '鯡魚罐頭', '螺獅粉'))

阿香愛吃臭豆腐、鯡魚罐頭和榴蓮。

3、變量名形式的簡單字段名

使用變量名形式的簡單字段名傳遞關(guān)鍵字參數(shù)

print('我大哥是{name},今年{age}歲。'.format(name='阿飛', age=20))

我大哥是阿飛,今年20歲。

關(guān)鍵字參數(shù)的順序可以隨意調(diào)換

print('我大哥是{name},今年{age}歲。'.format(age=20, name='阿飛'))

我大哥是阿飛,今年20歲。

4、簡單字段名的混合使用

混合使用數(shù)字形式和變量名形式的字段名,可以同時傳遞位置參數(shù)和關(guān)鍵字參數(shù)

print('這是一個關(guān)于{0}、{1}和{girl}的故事。'.format( '小明', '阿飛', girl='阿香'))

這是一個關(guān)于小明、阿飛和阿香的故事。

但是關(guān)鍵字參數(shù)必須位于位置參數(shù)之后

print('這是一個關(guān)于{0}、{1}和{girl}的故事。'.format('小明', girl='阿香' , '阿飛'))

SyntaxError: positional argument follows keyword argument

數(shù)字也可以省略

print('這是一個關(guān)于{}、{}和{girl}的故事。'.format('小明', '阿飛', girl='阿香'))

但是省略字段名不能和數(shù)字形式的字段名同時出現(xiàn)

# print('這是一個關(guān)于{}、{1}和{girl}的故事。'.format( '小明', '阿飛', girl='阿香'))

ValueError: cannot switch from automatic field numbering to manual field specification

5、可以使用 *元組 和 **字典 的形式傳參,兩者可以混合使用。位置參數(shù)、關(guān)鍵字參數(shù)、*元組 和 **字典 也可以同時使用,但是要注意,位置參數(shù)要在關(guān)鍵字參數(shù)前面,*元組 要在 **字典 前面。

使用元組傳參

infos = '鋼鐵俠', 66, '小辣椒'

print('我是{},身價{}億。'.format(*infos))

我是鋼鐵俠,身家66億。

print('我是{2},身價{1}億。'.format(*infos))

我是小辣椒,身家66億。

使用字典傳參

venom = {'name': '毒液', 'weakness': '火'}

print('我是{name},我怕{weakness}。'.format(**venom))

我是毒液,我怕火。

同時使用元組和字典傳參

hulk = '綠巨人', '拳頭'

captain = {'name': '美國隊長', 'weapon': '盾'}

print('我是{}, 我怕{weapon}。'.format(*hulk, **captain))

print('我是{name}, 我怕{1}。'.format(*hulk, **captain))

我是綠巨人, 我怕盾。

我是美國隊長, 我怕拳頭。

同時使用位置參數(shù)、元組、關(guān)鍵字參數(shù)、字典傳參注意:

  • 位置參數(shù)要在關(guān)鍵字參數(shù)前面
  • *元組要在**字典前面

tup = '鷹眼',

dic = {'weapon': '箭'}

text = '我是{1},我怕{weakness}。我是{0},我用{weapon}。'

text = text.format(

*tup, '黑寡婦', weakness='男人', **dic)

print(text)

我是黑寡婦,我怕男人。我是鷹眼,我用箭。

6、[] 方括號的使用

傳遞位置參數(shù)

  • 用列表傳遞位置參數(shù)
  • 用元組傳遞位置參數(shù)
  • 用字典傳遞位置參數(shù)

方括號用法:用列表傳遞位置參數(shù)

infos = ['阿星', 9527]

food = ['霸王花', '爆米花']

print('我叫{0[0]},警號{0[1]},愛吃{1[0]}。'.format(infos, food))

我叫阿星,警號9527,愛吃霸王花。

方括號用法:用元組傳遞位置參數(shù)

food = ('僵尸', '腦子')

print('我叫{0[0]},年齡{1},愛吃{0[1]}。'.format(food, 66))

我叫僵尸,年齡66,愛吃腦子。

方括號用法:用字典傳遞位置參數(shù)

dic = dict(name='阿星', pid=9527)

print('我是{[name]}!'.format(dic))

多個替換字段,不能省略數(shù)字

print('我是{0[name]},警號{0[pid]}。'.format(dic))

我是阿星!

我是阿星,警號9527。

7、填充與對齊方式

各種對齊選項的含義如下:

^、<、>分別是居中、左對齊、右對齊,后面帶寬度

看以下的例子:

'{:>8}'.format('189') 輸出:' 189'

'{:0>8}'.format('189') 輸出:'00000189'

'{:a>8}'.format('189') 輸出:'aaaaa189'

8、正負(fù)號

  • 正負(fù)號選項僅對數(shù)字類型生效
  • 取值有三種:
  • + 正數(shù)前面添加正號,負(fù)數(shù)前面添加負(fù)號
  • - 僅在負(fù)數(shù)前面添加負(fù)號(默認(rèn)行為)
  • 空格:正數(shù)前面需要添加一個空格,以便與負(fù)數(shù)對齊

# 正負(fù)號

print('{:哈=+8.2f}'.format(3.14159))

print('{:哈=+8.2f}'.format(-3.14159))

print('{:哈=+8.2f}'.format(0))

print('{:哈=+8.2f}'.format(-0))

'''

+哈哈哈3.14

-哈哈哈3.14

+哈哈哈0.00

+哈哈哈0.00

'''

9、分組選項

分組選項 grouping_option 的取值有兩種:

  • 逗號 ,使用逗號對數(shù)字以千為單位進(jìn)行分隔。
  • n 類型的數(shù)字可以使用本地化的分隔符。

n 類型在本機(jī)無法使用分組選項 ,原因可能是中文沒有數(shù)字分隔符

# n 類型使用本地化的分組選項 ,

# 此項報錯,我懷疑是因為中文沒有數(shù)字的分隔符

# print('數(shù)字:{0:,n}'.format(6666))

ValueError: Cannot specify ',' with 'n'.

# 使用 d 類型確實是可以的

print('數(shù)字:{0:,d}'.format(6666))

數(shù)字:6,666

下劃線 _:使用下劃線對浮點數(shù)和 d 類型的整數(shù)以千為單位進(jìn)行分隔。對于 b、o、x 和 X 類型,每四位插入一個下劃線,其他類型都會報錯。

# 分組選項 _ 作用于 b 類型

print('數(shù)字:{0:_b}'.format(0b100111011))

數(shù)字:1_0011_1011

# 分組選項 _ 作用于 o 類型

print('數(shù)字:{0:_o}'.format(0o426754316))

數(shù)字:4_2675_4316

分組選項 _ 作用于 x 類型

print('數(shù)字:{0:_x}'.format(0x2a846e98d))

數(shù)字:2_a846_e98d

分組選項 _ 作用于 X 類型

print('數(shù)字:{0:_X}'.format(0X2a846e98d))

數(shù)字:2_A846_E98D

分組選項 _ 作用于其他類型(比如 n 類型)

print('字符串:{0:_n}'.format(1234567))

ValueError: Cannot specify ',' with 'n'.

10、精度

  • 精度指定了小數(shù)點后面要展示多少位小數(shù)
  • 對于非數(shù)字類型,精度指定了最大字段寬度
  • 整數(shù)類型不能指定精度

對于非數(shù)字類型,精度指定最大字段寬度

print('{0:.3}'.format('哇哈哈哈哈哈'))

哇哈哈

整數(shù)類型不能指定精度

print('{:.3d}'.format(666))

ValueError: Precision not allowed in integer format specifier

11、整數(shù)類型

b 類型:二進(jìn)制

print('{0:b}'.format(3))

11

c 類型:把整數(shù)轉(zhuǎn)換成 unicode 字符

print('{:c}'.format(97))

a

d 類型:十進(jìn)制整數(shù)

print('{:d}'.format(666))

666

o 類型:八進(jìn)制數(shù)

print('{:o}'.format(10))

12

x 類型:十六進(jìn)制數(shù),a到f小寫

print('{:x}'.format(15))

f

X 類型:十六進(jìn)制數(shù),A到F大寫

print('{:X}'.format(15))

F

n 類型:與d相同,會插入本地化的分隔符

n 數(shù)字 number 類型,與 d 相同,只不過它會使用本地化的數(shù)字分隔符。

經(jīng)試驗,在本機(jī)為 n 類型指定任何分組選項(, 和 _)都會報錯。

ValueError: Cannot specify ',' with 'n'.

print('{:n}'.format(66666))

經(jīng)試驗,本機(jī)無法為 n 指定任何分組選項(,_)

# print('{:,n}'.format(66666))

ValueError: Cannot specify ',' with 'n'.

print('{:_n}'.format(66666))

ValueError: Cannot specify ',' with 'n'.

None 不指定類型,與 d 相同。

浮點數(shù)類型

e 類型:科學(xué)記數(shù)法默認(rèn)精度為 6 位

print('{:e}'.format(1234567.1234567))

1.234567e+06

E 類型:與 e 相同,用大寫 E 表示指數(shù)默認(rèn)精度為 6 位

print('{:E}'.format(1234567.1234567))

# 修改精度為 10 位

print('{:.10E}'.format(1234567.1234567))

1.234567E+06

1.2345671235E+06

f 類型,定點記法,默認(rèn)精度為 6。

print('{:f}'.format(1234567.1234567))

1234567.123457

F 類型,F(xiàn) 定點記法,同 f,但是會把 nan 轉(zhuǎn)換成 NAN,把 inf 轉(zhuǎn)換成 INF

nan = float('nan')

inf = float('inf')

print('{:F}\n{:F}'.format(nan, inf))

NAN

INF

g 類型,自動轉(zhuǎn)換到 e 或者 f 格式

g 通用 general 格式。自動轉(zhuǎn)換到 e 或者 f 格式,具體的轉(zhuǎn)換規(guī)則在此省略。正無窮、負(fù)無窮、正零、負(fù)零和非數(shù)字分別顯示為 inf,-inf,0,-0,nan。指定精度為 0 時等價于精度為 1。默認(rèn)精度為 6 位。

print('{:g}'.format(1234567.1234567))

print('{:g}'.format(1234.1234))

1.23457e+06

1234.12

n 類型,n 數(shù)字 number 類型。跟 g 一樣,只不過用本地化的分隔符來分隔數(shù)字。

print('{:n}'.format(1234567.1234567))

print('{:n}'.format(1234.1234))

1.23457E+06

1234.12

# 經(jīng)試驗,本機(jī)指定分組選項會報錯

print('{:,n}'.format(1234.1234))

ValueError: Cannot specify ',' with 'n'.

print('{:_n}'.format(1234.1234))

ValueError: Cannot specify ',' with 'n'.

% 類型,% 百分號類型。會將數(shù)字乘以 100,然后以 f 定點 fixed-point 格式顯示,最后加上一個百分號 %。

print('{:%}'.format(1))

100.000000%

None 不指定類型。輸出效果類似調(diào)用 str() 函數(shù)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多