写点什么

Python 格式字符串的三种方法你都掌握了吗,%s%d%f+format()+f-string,深度测评 YYDS 实至名归

作者:是Dream呀
  • 2022 年 2 月 15 日
  • 本文字数:3544 字

    阅读完需:约 12 分钟

Python格式字符串的三种方法你都掌握了吗,%s%d%f+format()+f-string,深度测评YYDS实至名归

📢📢📢📣📣📣🌻🌻🌻Hello,大家好我叫是 Dream 呀,一个有趣的 Python 博主,多多关照😜😜😜🏅🏅🏅CSDN 2021 年度博客之星 TOP100,2021 年度博客之星领域 TOP5,Python 领域优质创作者,欢迎大家找我合作学习(文末有 VX 想进学习交流群 or 学习资料 欢迎+++)💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺🍉🍉🍉“一万次悲伤,依然会有 Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈🌟🌟🌟✨✨✨


前言: 在我们日常的学习中,我们总是免不了和各种输入输出打交道,而在这其中输出更是重中之重,有时候就因为输出的格式不对,或者说语法用的不正确,往往会导致最后的结果不尽如人意。以及各种输出的奇葩要求往往搞的我们头大,那今天就由 Dream 带大家来实际测评和总结一下各种格式化字符串方法吧,赶快为你喜欢的方法种草吧~@TOC

一、%s%d%f 方法

简单而言在 python2.5 版本之前,我们使用的都是最原始的格式化方法 %s,而这种方法也是目前为止我们最常用的方法,简单又方便。让我们来看一下他的具体用法:

1.标志性符号

当我们看到输出语句存在 %d,%s,%f 等百分号的时候 ,这便是我们所说的第一种 %方法。Python 支持字符串格式化输出,尽管这样可能遇到非常复杂的表达式,但最基本的是用法就是将一个值插入到一个有字符串格式符 %s 的字符串中例 1: 输入:


name = '是Dream呀'print('Hello,大家好,我叫%s'%name)
复制代码


输出:


Hello,大家好,我叫是Dream呀
复制代码


这里大家要注意,字符串和变量中间要用 %连接,不可以用‘,’进行连接'Hello,大家好,我叫%s',name,如果这样连接就直接相当于把变量在字符串之后进行输出啦。例 2: 输入:


name = '是Dream呀'print('Hello,大家好,我叫%s',name)
复制代码


输出:


Hello,大家好,我叫%s 是Dream呀
复制代码

2.输出数据类型

在程序中,看到 %s 这样的操作符,这就是 python 中字符串格式化的符号。除此之外,还可以用 %符号对其他类型的数据进行格式化。常见的格式化符号如下:


  • %s 通过 str()字符串转换来格式化

  • %f 浮点实数

  • %d 有符号的十进制整数

3.%10s %-10s %.10s 用法

(1)%10s

%10s 代表输出宽度为 10 个字符,如果输出的字符串不超过 10,则在左边补空格;宽度超过 10,按原长度输出。例 3: 输入:


string = '12345'print("123456789ABCDEFGHI")print("%10s" %string) 
复制代码


输出:


123456789ABCDEFGHI     12345
复制代码

(2)%-10s

和上面的 %10s 相反,如果输出的字符串宽度不超过 10,则在右边补齐空格;宽度超过 10,按原长度输出。例 4: 输入:


string = '12345'print("123456789ABCDEFGHI")print("%-10s" %string + "aaaaa")  # 长度未超过10,右边补齐print("%-3s" %string + "aaaaa")  # 长度超过3,原样输出
复制代码


输出:


123456789ABCDEFGHI12345     aaaaa12345aaaaa
复制代码

(3)%.10s

%.10s 表示截取前 10 个字符,若原长度不够 10,则原样输出。例 5: 输入:


string = '12345'print("123456789ABCDEFGHI")print("%.3s" %string) #原长度超过3,截取前3个字符print("%.10s" %string)#原长度不够10,原样输出
复制代码


123456789ABCDEFGHI12312345
复制代码

(4)%10.3s

这种格式化字符串要分成两部分来看,先运行右边的".3"部分,即先截取 3 个字符;再运行左边的"10"部分,即上面“1”中提到的功能。具体见下面的例子:例 6: 输入:


string = '12345'print("123456789ABCDEFGHI")print("%10.3s" %string)      # 先截取3个字符("123"),由于长度不足10,左边补7个空格print("%10.7s" %string)      # 先截取7个字符("12345"),由于长度不足10,左边补5个空格print("%2.3s" %string)       # 先截取3个字符("123"),由于长度超过2,原样输出
复制代码


123456789ABCDEFGHI       123     12345123
复制代码

4.%d %2d %02d %-2d% %.2d 的区别

%d 就是普通的输出了整形数


%2d 是将数字按宽度为 2,采用右对齐方式输出,若数据位数不到 2 位,则左边补空格。%02d,和 %2d 差不多,只不过左边补 0


%-2d 将数字按宽度为 2,采用左对齐方式输出,若数据位数不到 2 位,则右边补空格 %.2d 输出整形时最少输出 2 位,如不够前面以 0 占位。如输出 2 时变成 02,200 时只输出 200;输出浮点型时(%.2f)小数点后强制 2 位输出例 7: 输入:


num = 1print("%d" % (num))print("%2d" % (num))print("%02d" % (num))print("%-2d" % (num))print("%.2d" % (num))print("%.2d" % (200))
复制代码


1 1011 01200
复制代码

5.%f 详解

(1)%f

%f 时表示原值,默认是小数点后 5 位数例 8: 输入:


import mathprint('%f'%math.pi)
复制代码


3.141593
复制代码

(2)%9f

只是 %9f 时,表示打印长度 9 位数,小数点也占一位,不够左侧补空格


例 9: 输入:


import mathprint('%f'%math.pi)print('%9f'%math.pi)
复制代码


3.141593 3.141593
复制代码

(3)03.f

只有.没有后面的数字时,表示去掉小数输出整数,03 表示不够 3 位数左侧补 0


例 10: 输入:


import mathprint('%f'%math.pi)print('%.f'%math.pi)print('%03.f'%math.pi)
复制代码


3.1415933003
复制代码

(4)%6.3f

%6.3f 表示小数点后面精确到 3 位,总长度 6 位数,包括小数点,不够左侧补空格例 11: 输入:


import mathprint('%f'%math.pi)print('%6.3f'%math.pi)
复制代码


3.141593 3.142
复制代码

(5)%-6.3f

%-6.3f 表示小数点后面精确到 3 位,总长度 6 位数,包括小数点,不够右侧补空格


例 12: 输入:


import mathprint('%f'%math.pi)print('%-6.3f'%math.pi)
复制代码


3.1415933.142     
复制代码

二、format()方法

从 python3.0 版本开始起(python2.6 同期发布),Python 中同时支持两个版本的格式化,多出来的一个新版本就是利用 format()函数,进行格式化输出。

1.无参(1)

例 13: 输入:


print('{} {}'.format('hello','world'))
复制代码


hello world
复制代码

2.无参(2)

例 14: 输入:


print('{0} {1}'.format('hello','world'))
复制代码


world hello
复制代码

3.无参(3)

例 15: 输入:


print('{1} {0} {1}'.format('hello','world'))
复制代码


world hello world
复制代码

4.key value

例 16: 输入:


print('ID:{id},Name:{name}'.format(id='001',name='hello'))
复制代码


ID:001,Name:hello
复制代码

5.列表

例 17: 输入:


list=['001','hello']print('ID:{List[0]},Name:{List[1]}'.format(List = list))print('ID:{0[0]},Name:{0[1]}'.format(list))
复制代码


ID:001,Name:helloID:001,Name:hello
复制代码

6.字典

例 18: 输入:


dict={'id':'001,'name':'hello'}print('ID:{Dict[0]},Name:{Dict[1]}'.format(Dict = dict))print('ID:{id},Name:{name}'.format(**dict))
复制代码


ID:001,Name:helloID:001,Name:hello
复制代码

7.类

例 19: 输入:


class value():  id = '001'  name = 'hello'print('ID:{Value.id},Name{Value.name}'.format(Value = value))
复制代码


ID:001,Name:hello
复制代码

8.数字格式化

  • 3.1415926 {:.2f} 3.14 保留小数点后两位

  • 3.1415926 {:+.2f} +3.14 带符号保留小数点后两位

  • -1 {:+.2f} -1.00 带符号保留小数点后两位

9.格式总结

第一种方式:固定形式的格式化填充,给的顺序和填充顺序完全一致。例 20: 输入:


b1 = "四大天王:{}、{}、{}、{}".format("是Dream呀","郭富城","张学友","黎明")print(b1)
复制代码


四大天王:是Dream呀、郭富城、张学友、黎明
复制代码


第二种方式:大括号{ }中写的是 format()传入值所对应的下标。例 21: 输入:


b2 = "四大天王:{2}、{0}、{3}、{1}".format("刘德华","郭富城","张学友","黎明")print(b2)
复制代码


第三种方式:大括号{ }中的变量,和 format()传入值是一一对应的。例 22: 输入:


x1 = "刘德华"x2 = "郭富城"x3 = "张学友"x4 = "黎明"b3 = "四大天王:{p}、{q}、{r}、{s}".format(p=x4,q=x2,r=x1,s=x3)print(b3)
复制代码

三、f-string 方法

python3.6 版本后,又引入了一种新的字符串格式化方式 f-string。从 %s 格式化到 format 格式化再到 f-string 格式化,格式化的方式越来越直观,f-string 的效率也较前两个高一些,使用起来也比前两个更简单一些。f-string 格式化:占位符{},搭配 f 符号一起使用

简单使用

f-string 用大括号 {} 表示被替换字段,其中直接填入替换内容:例 23: 输入:


name = '是Dream呀'print('Hello, my name is {name}'.format(name=name))print(f'Hello, my name is {name}')
复制代码


Hello, my name is 是Dream呀Hello, my name is 是Dream呀
复制代码


例 24: 输入:


import datetimename = '是Dream呀'age = 20date = datetime.date(2022,2,5)print(f'my name is {name}, this year is {date:%Y},Next year, I\'m {age+1}')# my name is 是Dream呀, this year is 2022,Next year, I'm 21
复制代码


其余的方法也都和 format()函数方法一致,大家自行参考即可。

总 结 种 草

python 最先的格式化字符串方法是 %,但他的致命缺点是支持的类型有限。format()比较全面,而 format()中有的 f-string 基本都有,而且更简单,所以说一般来说用 f-string,除非特殊情况下 format()。

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!✨ ✨ ✨🍻🍻🍻如果你喜欢的话,就不要吝惜你的一键三连了~




用户头像

是Dream呀

关注

Python领域优质创作者 2021.03.30 加入

2021年度博客之星TOP100,2021年度领域TOP5 Python领域优质创作者,交流、合作、学习,欢迎私信我VX+++ 一万次悲伤,依然会有Dream,我一直在最温暖的地方等你!

评论

发布
暂无评论
Python格式字符串的三种方法你都掌握了吗,%s%d%f+format()+f-string,深度测评YYDS实至名归