有时候,为了更方便、灵活的运用字符串。在Python中,正好有3种方式,支持格式化字符串的输出 。

3种字符串格式化工具的简单介绍

python2.5版本之前,我们使用的是老式字符串格式化输出%s

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

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

3种字符串格式化工具的应用对比

基本用法

这里首先先介绍这3个工具的基本用法,基本格式如下。

  • %格式化:占位符%,搭配%符号一起使用;
  • format()格式化:占位符{},搭配format()函数一起使用;
  • f-string格式化:占位符{},搭配f符号一起使用;

① 对比使用,观察各自的特点

a = "%s张飞、%s关羽、%s刘备、%s赵云" % (1, 2, 3, 4)
print(a)
# 1张飞、2关羽、3刘备、4赵云 b = "{}张飞、{}关羽、{}刘备、{}赵云".format(1, 2, 3, 4)
print(b)
# 1张飞、2关羽、3刘备、4赵云 c = f"{1}张飞、{2}关羽、{3}刘备、{4}赵云"
print(c)
# 1张飞、2关羽、3刘备、4赵云

② %格式化

此种方式只支持固定形式的格式化填充,给的顺序和填充顺序完全一致。

a = "四大天王:%s、%s、%s、%s" % ("刘德华","郭富城","张学友","黎明")
print(a)
# 四大天王:刘德华、郭富城、张学友、黎明

③ format()格式化

此种方式不仅支持固定形式的格式化填充,还支持位置格式化填充,即共有三种形式。

  • 第一种方式:固定形式的格式化填充,给的顺序和填充顺序完全一致。
b1 = "四大天王:{}、{}、{}、{}".format("刘德华","郭富城","张学友","黎明")
print(b1) # 四大天王:刘德华、郭富城、张学友、黎明
  • 第二种方式:大括号{ }中写的是format()传入值所对应的下标。
b2 = "四大天王:{2}、{0}、{3}、{1}".format("刘德华","郭富城","张学友","黎明")
print(b2) # 四大天王:张学友、刘德华、黎明、郭富城
  • 第三种方式:大括号{ }中的变量,和format()传入值是一一对应的。
x1 = "刘德华"
x2 = "郭富城"
x3 = "张学友"
x4 = "黎明"
b3 = "四大天王:{p}、{q}、{r}、{s}".format(p=x4,q=x2,r=x1,s=x3)
print(b3) # 四大天王:黎明、郭富城、刘德华、张学友

④ f-string格式化

此种方式的填充,用起来更加随意,直接在{}中输入变量即可,极其方便,我们用一个简单的案例看看。

# 直接在{}中输入变量即可,位置随意放
x1 = "刘德华"
x2 = "郭富城"
x3 = "张学友"
x4 = "黎明"
c = f"四大天王:{x1}、{x3}、{x2}、{x4}"
print(c) # 四大天王:刘德华、张学友、郭富城、黎明

填充功能对比

首先我们要知道填充的概念是什么,只有知道了它的概念,才能够灵活运用。

  • 概念:当指定了字符串最终的长度,但是现有的字符串没有那么长,那么我们就用某种字符(填充字符)来填满至这个长度,这就是“填充”

① %格式化

  • 格式:"%10s" % ("字符串"),使用前仔细观察书写格式
  • 含义:上述10代表字符串的填充长度。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度;
  • 注意:此种填充,默认是在字符串左侧填充;
a = "%s" % ("梁同学")
print(a,len(a))
# 梁同学 3 b = "%10s" % ("梁同学")
print(b,len(b))
# 梁同学 10 c = "%10s" % ("梁同学,我早上吃了一碗热干面")
print(c,len(c))
# 梁同学,我早上吃了一碗热干面 14

② format()格式化

  • 格式:"{:10}".format("字符串"),使用前仔细观察书写格式
  • 含义:上述10代表字符串的填充长度。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度;
  • 注意:此种填充,默认是在字符串右侧填充;
a = "{:10}".format("梁同学")
print(a, len(a))
# 梁同学 10 b = "{:10}".format("梁同学,我早上吃了一碗热干面")
print(b, len(b))
# 梁同学,我早上吃了一碗热干面 14

③ f-string格式化

  • 格式:f"{name1:10}",使用前仔细观察书写格式
  • 含义:上述10代表字符串的填充长度,name1代表某个字符串变量。如果字符串的长度,大于填充长度,填充长度无效;如果字符串的长度,小于填充长度,则会将字符串长度填充至指定的填充长度;
  • 注意:此种填充,默认是在字符串右侧填充;
name1 = "梁同学"
name2 = "梁同学,我早上吃了一碗热干面" a = f"{name1:10}"
print(a, len(a))
# 梁同学 10 b = f"{name2:10}"
print(b, len(b))
梁同学,我早上吃了一碗热干面 14

对齐功能对比

首先我们要知道填充的概念是什么,只有知道了它的概念,才能够灵活运用。

  • 概念:"对齐"要与"填充"一起使用,才会显得有意义。当我们进行填充的时候,我们可以选择只在字符串左侧填充,也可以选择只在字符串右侧填充,还可以选择在字符串两侧填充(字符串居中显示的填充方式);

① %s:实现对齐功能,只有左对齐和右对齐;

# 左填充
a = '%10s' % ('梁同学')
print(a, len(a))
# 梁同学 10 # 右填充
b = '%-10s' % ('梁同学')
print(b, len(b))
# 梁同学 10

② format():实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;

a = '{:>10}'.format('梁同学')
print(a, len(a))
# 梁同学 10 # 右填充
b = '{:<10}'.format('梁同学')
print(b, len(b))
# 梁同学 10 # 居中填充
c = '{:^10}'.format('梁同学')
print(c, len(c))
# 梁同学 10

③ f-string:实现对齐功能,不仅有左对齐和右对齐,还有居中对齐;

name = "梁同学"

a = f"{name:>10}"
print(a, len(a))
# 梁同学 10 b = f"{name:<10}"
print(b, len(b))
# 梁同学 10 c = f"{name:^10}"
print(c, len(c))
# 梁同学 10

使用“任意符号”完成填充功能

这个知识点必须在讲完填充和对齐后,才能为大家演示。其实没有为什么,就是语法是这样的,我们就必须这样做。

① %格式化

旧版语法的%格式化,使用"特定符号"填充,很麻烦,不直接,你也不用去管。这里主要看新版语法中format()格式化和f-string格式化,进行"特定符号"填充。

② format()格式化

# 左填充
a = '{:_>10}'.format('梁同学')
print(a, len(a))
# _______梁同学 10 # 右填充
b = '{:_<10}'.format('梁同学')
print(b, len(b))
# 梁同学_______ 10 # 居中填充
c = '{:_^10}'.format('梁同学')
print(c, len(c))
# ___梁同学____ 10

③ f-string格式化

name = "梁同学"
a = f"{name:_>10}"
print(a, len(a))
# _______梁同学 10 b = f"{name:_<10}"
print(b, len(b))
# 梁同学_______ 10 c = f"{name:_^10}"
print(c, len(c))
# ___梁同学____ 10

与“数字”相关的格式化填充技巧

① 你有必要了解的知识

经过前面的学习和叙述,我们已经知道这3种方法,都是完成字符串格式化的操作的,但是为何它们又可以填充数字呢?

原因:Python自动帮我们做了一次隐式转换,但是这种隐式转换是需要付出代价的,它会消耗额外的性能,牺牲速度。因此我们有特定的语法去解决这个问题。

② %格式化

  • %s表示填充字符串;%d表示填充整数;%f表示填充小数;
  • 完成整数的填充:
# 仅仅使用%s,既可以完成字符串的填充,又可以完成数字的填充
a = '%s' % (3000)
print(a)
# 3000 a1 = '%s' % ("3000")
print(a1)
# 3000 # 当使用了%d后,只可以填充数字,不能填充字符串,否则会报错# 使用%d填充整数,是推荐写法
b = '%d' % (3000)
print(b)
# 3000 b1 = '%d' % ("3000")
print(b1)
# TypeError: %d format: a number is required, not str
  • 完成浮点数的填充:
a = '%.2f' % (3.1415926)
print(a)
# 3.14 b = '%.3f' % (3.1415926)
print(b)
# 3.142

③ format()格式化

  • 完成整数的填充:
# 不指定d符号,既可以完成字符串的填充,又可以完成数字的填充
a = '{:$>5}'.format(3000)
print(a)
# $3000 a1 = '{:$>5}'.format("3000")
print(a1)
# $3000 # 当指定了d符号后,只可以填充数字,不能填充字符串,否则会报错
# 使用符号d填充整数,是推荐写法
b = '{:¥>5d}'.format(3000)
print(b)
# ¥3000 b1 = '{:¥>5d}'.format("3000")
print(b1)
# ValueError: Unknown format code 'd' for object of type 'str'
  • 完成浮点数的填充:
a = '{:.2f}'.format(3.14159268)
print(a)
# 3.14 b = '{:.3f}'.format(3.14159268)
print(b)
# 3.142

④ f-string格式化

  • 完成整数的填充:
num1 = 3000
num2 = "3000" # 不指定d符号,既可以完成字符串的填充,又可以完成数字的填充
a = f'{num1}'
print(a)
# 3000 a1 = f'{num2}'
print(a1)
# 3000 # 当指定了d符号后,只可以填充数字,不能填充字符串,否则会报错
# 使用符号d填充整数,是推荐写法
b = f'{num1:d}'
print(b)
# 3000 b1 = f'{num2:d}'
print(b1)
# ValueError: Unknown format code 'd' for object of type 'str'
  • 完成浮点数的填充:
num = 3.14159268
a = f'{num:.2f}'
print(a)
# 3.14 b = f'{num:.3f}'
print(b)
# 3.142

Python基础(十五):Python的3种字符串格式化,做个超全对比!的更多相关文章

  1. 【笔记】Python基础二:数据类型之集合,字符串格式化,函数

    一,新类型:集合 集合出现之前 python_l = ['lcg','szw','zjw'] linux_l = ['lcg','szw','sb'] #循环方法求交集 python_and_linu ...

  2. python基础十五之递归函数

    递归函数,在函数中调用自身函数,就会形成一个递归函数.例如: def recursion(n): n += 1 print(n) recursion(n) 由于递归函数的结构,在函数调用时,它会一直调 ...

  3. python 基础(十五) socket编程

    SOCKET TCP协议: 有请求 有响应 称之为 tcp协议 是面向连接的协议 就是在收发数据之前 必须先要建立一个可靠的链接 三次握手 如:网站 UDP协议: 是一个非链接的协议 传输之前不需要键 ...

  4. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  5. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  6. Python第十五天 datetime模块 time模块 thread模块 threading模块 Queue队列模块 multiprocessing模块 paramiko模块 fabric模块

    Python第十五天  datetime模块 time模块   thread模块  threading模块  Queue队列模块  multiprocessing模块  paramiko模块  fab ...

  7. 孤荷凌寒自学python第二十五天初识python的time模块

    孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...

  8. 孤荷凌寒自学python第十五天python循环控制语句

    孤荷凌寒自学python第十五天python循环控制语句 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) python中只有两种循环控制语句 一.while循环 while 条件判断式 1: ...

  9. Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)

    Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...

随机推荐

  1. npm & private npm service & nrm & nvm

    npm & private npm service & nrm & nvm npm server # nrm https://www.cnblogs.com/xgqfrms/t ...

  2. Nestjs 修改dist目录

    修改tsconfig.json { "compilerOptions": { "outDir": "./server-dist", // 这 ...

  3. regex read once bug

    regex read once bug read once bug StackOverflow Question https://stackoverflow.com/questions/5916796 ...

  4. 以代码为剑、数学为犁,SPC构建NGK算力生态体系

    人类创造工具,工具反过来也改变着人类.以区块链为核心的货币革命率先吹响了对金融世界重塑的号角.以代码为剑.数学为犁,区块链构建了新的网路信任体系,这是一切的开始.基于此,NGK区块链技术将赋能实体产业 ...

  5. Python爬虫_糗事百科

    本爬虫任务: 爬虫糗事百科网站(https://www.qiushibaike.com/)--段子版块中所有的[段子].[投票数].[神回复]等内容 步骤: 通过翻页寻找url规律,构造url列表 查 ...

  6. 宝塔面板配置Let's Encrypt证书自动续签失效及解决方案

    一.背景小故事 笔者手里有个朋友交给我去日常运维项目是PHP+微信小程序,部署在Linux系统上. 这个项目是用宝塔面板去进行日常的可视化运维管理,用起来蛮香的. 如不清楚宝塔的同学,可以自行了解,这 ...

  7. Redis6.0.9主从搭建

    所谓主从,大家都知道主是写数据,而从是进行数据的拷贝. 1:配置 主节点 127.0.0.1 6379 从节点 127.0.0.1 6378 先将单机版的配置文件赋值两份出来,原先的配置中主要改动有: ...

  8. setScaledContents

    ui->catchPhotoLabel_607->setPixmap(QPixmap::fromImage(*m_imageCatchtDefaultPhoto_607).scaled(Q ...

  9. WIFI6 基本知识(一)

    什么是WI-FI6(802.11ax) Wi-Fi 6 是下一代 802.11ax 标准的简称.随着 Wi-Fi 标准的演进,WFA 为了便于 Wi-Fi 用户和设备厂商轻松了解其设备连接或支持的 W ...

  10. MySQL数据库插入数据出现 ERROR 1526 (HY000): Table has no partition for value xxx

    MySQL数据库插入数据出现ERROR 1526 (HY000): Table has no partition for value xxx工作的时候发现无法插入数据,报错:ERROR 1526 (H ...