python全栈开发《28.字符串格式化的三种方式之根据类型定义的格式化》

1.什么是格式化

游乐园有旋转木马,是否玩过?这些旋转木马之上,每天都会迎来不同的面孔的小朋友去游玩。

每一个木马的背椅上,随着不同的小朋友坐上去,展现出来的画面都将有所改变。

虽然木马是不变的,但小朋友都是不一样的。所以对于旋转木马来说,固定的木马,流水的小朋友。

格式化非常类似于旋转木马。可以用对号入座的方式来关联它们。

字符串上的固定字符,就是旋转木马。字符串上可变的部分,就是小朋友。而木马的骑背是用来更换不同的小朋友的。

字符串中的格式化符号就是承载一个一个不同的字符的。

  • 1)定义:一个固定的字符串中有部分元素是根据变量的值而改变的字符串,就是字符串格式化。

e1d588e66afe4e73fd8273572b4bc1fc.png

看这个字符串,其中有几处元素是不确定的,它们用xx来替代。下面是日期和天的两个变量。这个字符串的xx的位置,可以随时跟随data和day,两个变量值的变化而变化。这个就是字符串的格式化。

2.使用格式化场景和目的

几个可能用到格式化的场景:

  • 1)发送邮件的时候。

  • 2)发送短信的时候。

  • 3)app上发送推送的时候。

这个3个场景为什么会用字符串的格式化呢?无论是发邮件还是发短信,或者是app上的推送。程序一发,肯定是一次性发送给很多人吧。

但是发给每个人的信息,它们的模版基本是一样的。只有针对于每个用户自己的信息是不同的。

如果每个用户发送出去的信息格式都完全不一样。那程序根本不知道该写些什么,只能靠人工一个一个得发。那样是非常消耗人力和时间的。

所以这个时候,使用统一的模版信息。将它进行格式化操作。每个用户仅仅改变需要格式化变更的位置,发送给用户。

是不是可以大大节省人力和时间呢?所以说:

  • 1)对于重复性很多的信息,通过格式化的形式,可以减少代码的书写量。

3.格式化的三种方式之根据类型定义的格式化

  • 1)字符串格式化使用操作符%来实现。

%在字符串里就是代表格式化的意思了。虽然都是%,但是使用场景不同,意义也就不同。

51991d5c8b72fad6ca6bfc96f23d12f9.png
格式化的一个完整分解图

这个字符串的完整分解过程:从左向右。共分为3个部分。第一个部分是格式化字符串的部分,也是字符串的主体。

在主体里,需要格式化的元素用%s来表示。这里有2个%s,说明有2个需要被格式化的变量。

看完左边的字符串主体后,往右看到一个%,这个%,左关联了字符串主体,右关联了对应格式符数量的变量元组。

这个%,也是格式化的重要组成部分。没有它,是无法格式化的。

可以这样认为,这个%是左边字符串中格式符与右边变量的桥梁。

再向右看,已经知道了这里是格式符对应的变量。这些变量与格式符顺序相同。一一对应,数量也要保持一致。否则就会报错了。

在这里,因为有2个字符串格式符,所以右边就会对应2个变量。

如果字符串主体中只有一个格式符,右边就只对应一个变量。

如果只有一个变量的情况下,就不需要通过元组来包裹。

只有在2个或2个以上变量的时候,才需要用元组来包裹。这就是一个完整字符串格式化的用法。

在这个例子中,发现右边变量里第一个变量是字符串,第二个变量是整型。

但左边对应的格式符都是%s,那是因为在python的格式化符号中,%s是一个通用的格式符。

任何类型,都可以通过%s来格式化匹配。

例1:

# coding:utf-8

info = 'my name is %s,my age is %s' % ('xiaobian',10)
print(info)

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/.venv/bin/python /Users/llq/PycharmProjects/pythonlearn/pythonlearn1/format.py 
my name is xiaobian,my age is 10

进程已结束,退出代码为 0

例2:

# coding:utf-8

info = 'my name is %s,my age is %s'

name_01 = '小编'
age_01 = 10
name_02 = 'dewei'
age_02 = 33
print(info % (name_01,age_01))
print(info % (name_02,age_02))

message = '您好,今天是%s,您的手机号码:%s 已经欠费了,请尽快充值'
print(message % ('星期一',123456789))

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/.venv/bin/python /Users/llq/PycharmProjects/pythonlearn/pythonlearn1/format.py 
my name is 小编,my age is 10
my name is dewei,my age is 33
您好,今天是星期一,您的手机号码:123456789 已经欠费了,请尽快充值

进程已结束,退出代码为 0

格式符与变量应该一一对应,数量相同,如果数量不同,会怎么样呢?

例3:

# coding:utf-8

info = 'my name is %s,my age is %s'

name_01 = '小编'
age_01 = 10
name_02 = 'dewei'
age_02 = 33
print(info % (name_01,age_01))
print(info % (name_02,age_02))

message = '您好,今天是%s,您的手机号码:%s 已经欠费了,请尽快充值'
print(message % ('星期一',123456789))
print(message % 1234567)

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/.venv/bin/python /Users/llq/PycharmProjects/pythonlearn/pythonlearn1/format.py 
my name is 小编,my age is 10
my name is dewei,my age is 33
您好,今天是星期一,您的手机号码:123456789 已经欠费了,请尽快充值
Traceback (most recent call last):
  File "/Users/llq/PycharmProjects/pythonlearn/pythonlearn1/format.py", line 14, in <module>
    print(message % 1234567)
TypeError: not enough arguments for format string

进程已结束,退出代码为 1

再用字符串格式化,格式其它的数据类型,比如列表和字典:

例4:

# coding:utf-8

info = 'my name is %s,my age is %s'

name_01 = '小编'
age_01 = 10
name_02 = 'dewei'
age_02 = 33
print(info % (name_01,age_01))
print(info % (name_02,age_02))

message = '您好,今天是%s,您的手机号码:%s 已经欠费了,请尽快充值'
print(message % ('星期一',123456789))
print(message % (1234567,'星期2'))
print(message)

books =['python','django','flask']
info_2 = 'my name is %s,my age is %s,my book is %s'
print(info_2 % (name_01,age_01,books))

dict_01 = {'a':'a','b':'b'}
print('dict is %s' % dict_01)

运行结果:

/Users/llq/PycharmProjects/pythonlearn/pythonlearn/.venv/bin/python /Users/llq/PycharmProjects/pythonlearn/pythonlearn1/format.py 
my name is 小编,my age is 10
my name is dewei,my age is 33
您好,今天是星期一,您的手机号码:123456789 已经欠费了,请尽快充值
您好,今天是1234567,您的手机号码:星期2 已经欠费了,请尽快充值
您好,今天是%s,您的手机号码:%s 已经欠费了,请尽快充值
my name is 小编,my age is 10,my book is ['python', 'django', 'flask']
dict is {'a': 'a', 'b': 'b'}

进程已结束,退出代码为 0
  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清菡软件测试

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值