有时候,为了更方便、灵活的运用字符串。在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. Web Share API

    Web Share API https://w3c.github.io/web-share/ Web Share API, W3C Editor's Draft 15 April 2020 https ...

  2. uniapp 在h5和小程序上使用高德获取用户城市位置

    开发文档 https://lbs.amap.com/api 错误状态 https://lbs.amap.com/api/webservice/guide/tools/info/ 虽然用的高德但是你还需 ...

  3. 浅析VAST代币与SPC算力币的释放模式

    许多区块链业界分析师认为,2021年的区块链市场或许与2020年的有些许不同.2020年的区块链市场更注重的是DeFi领域,很多公链项目以及资本市场的巨鲸们也是将目光锁定在DeFi领域.而2021年的 ...

  4. K8S部署Redis Cluster集群(三主三从模式) - 部署笔记

    一.Redis 介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序 ...

  5. 从微信小程序到鸿蒙js开发【06】——swiper&animator&marquee

    目录: 1.swiper轮播图 2.image-animator幻灯片 3.marquee跑马灯 4.nginx动静分离 1.swiper轮播图 微信小程序的swiper组件中只能放置swiper-i ...

  6. linux下安装mysql8.0.x步骤

    1.下载mysql mysql官网:https://dev.mysql.com/downloads/mysql/ 将下载的mysql上传打linux 2.解压并重命名 [root@rsyncClien ...

  7. docker仓库之分布式harbor (一)

    1.harbor介绍 harbor是一个用于存储和分发docker镜像的企业级Registry服务器,由VMware开源.其通过添加一些企业必须的功能特性,例如安全,标识和管理,扩展了开源docker ...

  8. Sapper:迈向理想的 Web 应用框架

    ​扎稳阵脚,再进一步. 注意:原文发表于2017-12-31,随着框架不断演进,部分内容可能已不适用. 给迫不及待的小伙伴们的快速入门:Sapper 文档 和快速模板 starter template ...

  9. 用量子计算模拟器ProjectQ生成随机数,并用pytest进行单元测试与覆盖率测试

    技术背景 本文中主要包含有三个领域的知识点:随机数的应用.量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识. 随机数的应用 在上一篇介绍量子态模拟采样 ...

  10. 虚拟机测试cobbler,网络安装加载最后出现 dracut:/#

    1.cobbler的几个重要概念: distro:发行版系统容,我理解为镜像来源,提供了kernel 和 initrd 文件以及repo源 profile:kickstart文件,用于定制系统,定制安 ...