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))
'''
         *
        ***
       *****
      *******
     *********
    ***********
   *************
  ***************
 *****************
*******************
'''

Python中format()用法_第1张图片 

你可能感兴趣的:(Python语法,python)