Python详解Format格式化函数

format函数实现字符串格式化的功能

基本语法为:

  • 通过 : 和 {} 来控制字符串的操作

一、对字符串进行操作

1. 不设置指定位置,按默认顺序插入

①当参数个数等于{}个数的时候

str_1 = "小明{}小美,可是小美{}小明".format("喜欢", "不喜欢")
print(str_1)

运行结果:

63702806-D39E-EEA6-92AD-925432B37BB6.png

②当参数个数大于{}个数的时候

str_1 = "小明{}小美,可是小美{}小明".format("喜欢", "不喜欢", "也不喜欢", "更不喜欢")
print(str_1)

运行结果:

2718BF72-50E8-4858-B3AB-B6298CDB4823.png

③当参数个数习小于{}个数的时候

str_1 = "小明{}小美,可是小美{}小明".format("喜欢")
print(str_1)

运行结果:

程序会报错:越界

1D31AA58-30EF-2010-FCC4-15B3CA0FFB1A.png

由此可以得出,当我们不指定参数位置的时候,format函数会帮我们按顺序将其接收到的参数,填入到{}中。

2. 设置指定位置

当format接收到的参数个数大于{}或者我们想将不同{}替换为相同字符串的时候,我们可以在{}内指定接收第几个参数。format接收的参数,从0开始。

str_1 = "小明{1}小美,可是小美{3}小明,小美{0}小明,小美{2}小华".format("不喜欢", "喜欢", "更喜欢", "很讨厌")
print(str_1)

在这一句代码中,分别为不同的{}指定了接收的参数位置。

运行结果:

45FBB320-B550-9F5E-6050-3519DB431F70.png

很显然,如果我们的{}的个数小于format的参数也是OK的。

str_1 = "小明{1}小美,可是小美{3}小明,小美{2}小华".format("不喜欢", "喜欢", "更喜欢", "很讨厌")
print(str_1)

运行结果:

05E1634F-38A5-A757-6365-984250277122.png

由此我们得出结论:

在使用format()函数的时候,我们给format()的个数是不限的,如果我们并没有在{}中指定位置,那么format()会自动按顺序将参数填入{},而如果我们为{}指定了位置,那么format()就会把指定位置的参数填入对应的{}中。

3.设置format()参数的值

①直接在format()中进行赋值

str_1 = "博主:{name}, 博客地址:{url}".format(name="KaiSarH", url="https://blog.csdn.net/KaiSarH")

运行结果:

ACB6432D-9C5D-F2A1-45B0-F303F3E34EFF.png

②通过传递多值参数向format传递参数进而对{}进行赋值

关于多值参数,可以看一下详解Python函数的参数和返回值

- 使用**传递字典。

在Python中,使用**可以传递一个字典参数,我们可以使用键名进行匹配,进而进行赋值

dict_1 = {"name": "KaiSarH",
          "url": "https://blog.csdn.net/KaiSarH"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)

运行结果:

3CDC8427-7F21-FD50-82FD-CEF56A1A0CE2.png

我们向format()传递的字典参数,所包含的键值对,必须包含所有的{}名。只能多(正确),不能少(报错)。

dict_1 = {"name": "KaiSarH",
          "url": "https://blog.csdn.net/KaiSarH",
          "login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_2)
dict_1 = {"name": "KaiSarH",
          "key": "https://blog.csdn.net/KaiSarH",
          "login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1)
print(str_4)

运行结果:

7459065E-4B32-1CFD-9763-25EE68A03D93.png

注意:我们可以向format()中传递多个字典,但是不可以含有相同键。

dict_1 = {"name": "KaiSarH",
          "url": "https://blog.csdn.net/KaiSarH",
          "login": "login information"}
str_2 = "博主:{name}, 博客地址:{url}".format(**dict_1)
dict_2 = {"name": "KaiSarH",
          "key": "https://blog.csdn.net/KaiSarH",
          "login": "login information"}
str_4 = "博主:{name}, 博客地址:{url}".format(**dict_1, **dict_2)
print(str_4)

运行结果:

4234CB40-3849-3EE5-D473-D15241DCA3A4.png

- 传递列表
list_1 = ["KaiSarH","https://blog.csdn.net/KaiSarH"]
str_3 = "博主:{0[0]}, 博客地址:{0[1]}".format(list_1)

运行结果:

D91179BB-96C1-A47A-8D92-64CA2D638085.png

除了传递一个列表,我们也可以向format()中传递多个列表,只需保证取值的时候无误就可以。

list_1 = ["ZhangSan","https://blog.csdn.net/KaiSarH"]
list_2 = ["KaiSarH", "http:www.baidu.com"]
str_3 = "博主:{1[0]}, 博客地址:{0[1]}".format(list_1, list_2)

运行结果:

3BC2C292-B376-A958-9471-BE42DD816867.png

③向format()中传入对象,进行赋值

与列表相同,我们同样可以向format()中传递多个对象,只要在赋值的之后做好对应就可以。

class Dog:
    def __init__(self, name):
        self.name = name

class Mouse:
    def __init__(self, name):
        self.name = name


tom = Dog("Tom")
jerry = Mouse("Jerry")

str_1 = "{0.name} want to eat {1.name}".format(tom, jerry)
print(str_1)

运行结果:

F93CFC20-B0AC-FBAD-2318-781A8569997E.png

二、对数字进行格式化
对于数字的格式化,我们主要是在{}中进行设置格式化数字的多种方法
  • 1.保留小数点后n位

    格式:{:.nf}

print("	{:.1f}".format(3.1415926535))
print("	{:.3f}".format(3.1415926535))
print("	{:.4f}".format(3.1415926535))
print("	{:.6f}".format(3.1415926535))

运行结果:

C50F3616-2339-FECF-7A77-A0E2B5C760BB.png

  • 2.带符号保留小数点后n位

    格式: {:+.nf}

print("	{:+.1f}".format(3.1415926535))
print("	{:+.3f}".format(-3.1415926535))
print("	{:+.4f}".format(3.1415926535))
print("	{:+.6f}".format(-3.1415926535))

运行结果:

EEAFADC3-7557-2567-4880-35FC4D644578.png

{:.nf} 和 {:+.nf}的区别

负数无区别,整数有无符号。

print("	{:.1f}".format(3.1415926535))
print("	{:+.1f}".format(3.1415926535))
print("	{:.3f}".format(-3.1415926535))
print("	{:+.3f}".format(-3.1415926535))
print("	{:.4f}".format(3.1415926535))
print("	{:+.4f}".format(3.1415926535))
print("	{:.7f}".format(-3.1415926535))
print("	{:+.7f}".format(-3.1415926535))

运行结果:

F39B0DF2-A159-EA4E-9378-A2A31BDF3985.png

  • 3.不带小数(只保留整数)

    格式: {:.0f}

print("	{:.0f}".format(3.1415926535))
print("	{:.0f}".format(-3.1415926535))
print("	{:.0f}".format(3.8415926535))

运行结果:

B20B06A9-1984-BC85-F370-E05A928A36F5.png

  • 4.如果整数的位数不足n位,在左边进行数字补零。如果已经够了n位,直接输出

    格式: {:0>nd}

print("	{:0>2d}".format(5))
print("	{:0>3d}".format(5))
print("	{:0>5d}".format(123456))

运行结果:

6F544730-71F7-A943-1EC8-6269399DF022.png

  • 5.如果整数的位数不足n位,在右边进行x补充。如果已经够了n位,直接输出

    格式: {:x<4d}

print("{:x<2d}".format(5))
print("{:x<3d}".format(5))
print("{:x<4d}".format(123456))

运行结果:

3BD6F54D-E686-2442-72C5-11304A802DBB.png

很显然,在补充操作中,我们既可以指定在哪一边补充,也可以指定补充的值为什么。

我们也可以利用print("{:x>.2f}".format(3.1))或者{:x<.2f}对浮点数进行操作

  • 6.以逗号分隔数字格式,每三位加入一个,

    格式: {:,}

print("	{:,}".format(314156926))

运行结果:

44E195DF-068A-C39B-B9E7-E88008CA49E3.png

  • 7.百分比格式(在我理解,就是把数字×100,保留两位数字,然后加一个百分号)

    格式: {:.2%}

print("{:.2%}".format(0.27896))

运行结果:

7747A700-A36F-C951-6DFD-B2C54497DF2F.png

  • 8.指数记法

    格式:{:.2e}

print("{:.2e}".format(100))

运行结果:

31F516D1-5E3D-C667-54A5-DF8F58DC061C.png

  • 9.右对齐(默认宽度为10)

    格式: {:>10d}

print("	{:>10d}".format(100))
print("	{:>10d}".format(2))
print("	{:>10d}".format(12580))

运行结果:

5F47E745-4333-7B19-D8A5-339A5E6FAC91.png

  • 10.左对齐(默认宽度为10)

    格式: {:<10d}

print("{:<10d}".format(100))
print("{:<10d}".format(2))
print("{:<10d}".format(12580))

运行结果:

CAA0EF00-91F6-9EF3-95A6-80F82265F707.png

  • 11.中间对齐(默认宽度为10)

    格式:{:^10d}

print("{:^10d}".format(100))
print("{:^10d}".format(2))
print("{:^10d}".format(12580))

运行结果:

072C332D-F068-CED6-F6B8-EEF8AE854863.png

  • 12.进制——b、d、o、x 分别是二进制、十进制、八进制、十六进制。

    格式:

    ‘{:b}’.format(11)

    ‘{:d}’.format(11)

    ‘{:\o}’.format(11)

    ‘{:x}’.format(11)

    ‘{:#x}’.format(11)

    ‘{:#X}’.format(11)

print("{:b}".format(125))
print("{:d}".format(125))
print("{:o}".format(125))
print("{:x}".format(125))
print("{:#x}".format(125))
print("{:#X}".format(125))

运行结果:

BC90DFFF-94C0-6461-2568-E0A345270BF3.png

当我们在格式化中,传入的参数中包含{}的时候,我们可以用{}进行转义。

当我们直接在format()中对参数进行赋值的时候,我们必须要把对参数的赋值放在最后

print("{name}对应的位置是{{0}},{}对应的位置是{{1}}".format("489", "zhangsan", name="123"))

运行结果:

E70A2ACE-BF48-E652-A3F3-AA9F82BEEF05.png

收藏 (0)
评论列表
正在载入评论列表...
我是有底线的