Python中format()用法

一、概览

自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数以大括号{}来标明被替换的字符串,通过{}和:来代替之前的%,从而快速处理各种字符串。

二、格式

1、语法格式

str.format():str是指字符串实例对象,常用格式为:‘ ’.format()。

2、参数格式

‘{[index][:[fill]align][sign][#][width][.precision][type]}{......}{......}’.format(),格式中[]内的参数都是可选参数,每个{}都表示是一个待替换的字符串。

index:指定冒号后面出现的参数在format()中的索引值,如果没有,则以format()中的默认顺序自动分配。

fill:指定空白处的填充符。

align:指定数字的对齐方式。

align含义
<左对齐,对于大部分对象时为默认
>右对齐,对于数字时为默认
=数据右对齐,同时将符号放置在填充内容的最左侧,该选项只对数字类型有效
^数据居中,此选项需和 width 参数一起使用

sign:指定有无符号数 。

sign含义
+正数前面添加 ‘ + ’ ,负数前面加 ‘ - ’
-正数前面不添加 ‘ + ’ ,负数前面加 ‘ - ’
space正数前面添加 ‘ 空格 ’ ,负数前面加 ‘ - ’
#对于二进制数、八进制数和十六进制数,使用此参数,各进制数前会分别显示 0b、0o、0x前缀;反之则不显示前缀

width:指定输出数据时所占的宽度。

.precision:如果后面存在type参数,则指的是保留小数的位数,如果type参数不存在,则是指有效数字的位数。

type:指定输出数据的具体类型。

type含义
s对字符串类型格式化
%显示百分比,默认显示小数点后六位
d十进制整数
c将十进制整数自动转化成对应的Unicode字符
b将十进制数自动转化成二进制数,并格式化输出
o将十进制数自动转化成八进制数,并格式化输出
x、X将十进制数自动转化成十六进制数,并格式化输出
e、E转化成科学计数法,并格式化输出
f、F转化为浮点数,默认保留六位小数,并格式化输出  
g、G自适应转化为e或f(E或F),并格式化输出

三、基本用法

1、按照顺序依次匹配参数。

format括号中的字符串可多不可少

print("my name is {},i am {} years old,my weight is {}.".format("Tom",8,"80kg"))
#my name is Tom,i am 8 years old,my weight is 80kg.

2、按照索引匹配参数。

print("my name is {0},i am {1} years old,i love {0}.".format("Tom",8))
#my name is Tom,i am 8 years old,i love Tom.

3、按照参数名匹配参数。

name='Tom'
age=8
#以f开头表示在字符串中支持大括号内的python表达式
print(f"my name is {name},i am {age} years old,i love {name}.")
#my name is Tom,i am 8 years old,i love Tom.
print("my name is {names},i am {age} years old,i love {names}.".format(names=name,age=10))
#my name is Tom,i am 10 years old,i love Tom.

4、混合使用

需要注意,混合使用时,命名参数必须写道最后。索引和顺序匹配不可混合使用。

print("my name is {name},i am {} years old,i love {name}.".format(10,"Tom",8,name='Peter'))
#my name is Peter,i am 10 years old,i love Peter.
print("my name is {name},i am {2} years old,i love {name}.".format(10,"Tom",8,name='Peter'))
#my name is Peter,i am 8 years old,i love Peter.

四、进阶用法

1、通过列表匹配参数

通过列表索引和参数索引进行匹配。在format格式化时,可使用*将list拆分为多个元素。

b=['Tom','Peter']
c=[8,10]
#两种方式实现列表参数传递
print("my name is {a[0]}, i love {a[1]}, we are {d[1]} years old.".format(a=b,d=c))
print("my name is {0[0]}, i love {0[1]}, we are {1[1]} years old.".format(b,c))
print("my name is {0}, i love {1}, we are {3} years old.".format(*b,*c))
#一样的结果:my name is Tom, i love Peter, we are 10 years old.

2、通过字典匹配参数

通过key进行匹配。在format格式化时,可使用**将dict拆分为多个键值对。

dic={'name':'Tom','age':8,'fruit':'apple'}
print("my name is {e[name]},i love {e[fruit]}.".format(e=dic))
print("my name is {0[name]},i love {0[fruit]}.".format(dic))
print("my name is {name},i love {fruit}.".format(**dic))
#结果:my name is Tom,i love apple.

3、通过类属性匹配参数

class Test:
    m='Tom'
    n='apple'
print("my name is {t.m}, i love {t.n}.".format(t=Test))
print("my name is {0.m}, i love {0.n}.".format(Test))
#结果:my name is Tom, i love apple.

五、格式化字符串

1、字符串左对齐

print("{:<}!".format("hello word"))      #左对齐
print("{:<20}!".format("hello word"))    #左对齐,宽度20,默认填充空格,<可省略
print("{:0<20}!".format("hello word"))   #左对齐,宽度20,填充0
print("{:*<20}!".format("hello word"))   #左对齐,宽度20,填充*
'''
hello word!
hello word          !
hello word0000000000!
hello word**********!
'''

2、字符串右对齐

print("{:>}!".format("hello word"))      #右对齐
print("{:>20}!".format("hello word"))    #右对齐,宽度20,默认填充空格
print("{:0>20}!".format("hello word"))   #右对齐,宽度20,填充0
print("{:*>20}!".format("hello word"))   #右对齐,宽度20,填充*
'''
hello word!
          hello word!
0000000000hello word!
**********hello word!
'''

3、字符串居中对齐

print("{:^}!".format("hello word"))      #居中对齐
print("{:^20}!".format("hello word"))    #居中对齐,宽度20,默认填充空格
print("{:0^20}!".format("hello word"))   #居中对齐,宽度20,填充0
print("{:*^20}!".format("hello word"))   #居中对齐,宽度20,填充*
'''
hello word!
     hello word     !
00000hello word00000!
*****hello word*****!
'''

4、混合使用

print("诗句:{0:Ω^10},\n诗句:{1:*<10}。\n诗句:{2:*>10},\n诗句:{3:■^10}。".format("墙角数枝梅","凌寒独自开","遥知不是雪","为有暗香来"))
'''
诗句:ΩΩ墙角数枝梅ΩΩΩ,
诗句:凌寒独自开*****。
诗句:*****遥知不是雪,
诗句:■■为有暗香来■■■。
'''

5、处理数字格式

#浮点数小数部分处理
print("π保留四位小数:{:.4f}".format(3.1415926))    #π保留四位小数:3.1416

#字符串截取
print("取字符串前四位:{:.4}".format('hello'))      #取字符串前四位:hell

#给数字加千位符
print("给数字加千位符:{:,}".format(646545314))     #给数字加千位符:646,545,314

#十进制转化为二进制
print("二进制转化:{:#b}".format(16))               #二进制转化:0b10000

#十进制转化为八进制
print("八进制转化:{:#o}".format(16))               #八进制转化:0o20

#十进制转化为十六进制
print("十六进制转化:{:#x}".format(16))             #十六进制转化:0x10

#使用=使数字右对齐
print("数字右对齐:{:*=10}".format(16))            #数字右对齐:********16

#混合处理
print("参数π:{1:■^+20.2%}".format(3,3.1415926))   #参数π:■■■■■■+314.16%■■■■■■

六、应用

绘制居中对齐的图案

for i in range(1,21,2):
    print("{:^20}".format("*"*i))
'''
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************
'''

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武当豆豆

为国家GDP快速增长做贡献

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值