有时候,为了更方便、灵活的运用字符串。在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. Nodejs file path to url path

    import * as path from 'path'; import * as url from 'url'; const savePath = path.join('public', 'imag ...

  2. django学习-18.*args和**kwargs的用法和使用场景

    目录结构 1.前言 2.[*args]的用法 2.1.第一步:首先编写这样的函数[test1]. 2.2.第二步:给函数[test1]赋值相关入参值. 2.3.第三步:调用函数[test1],得到以下 ...

  3. C#从1970年开始到现在时间的总秒数

    TimeSpan timeSpan = (DateTime.UtcNow - new DateTime(1970, 1, 1)); string timeStamp = ((int)timeSpan. ...

  4. 死磕以太坊源码分析之EVM动态数据类型

    死磕以太坊源码分析之EVM动态数据类型 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习. So ...

  5. MySQL 常用命令手册 增删改查大法

    一.数据库操作 创建数据库 语法: CREATE DATABASE database_name; 删除数据库 删除数据库务必谨慎!因为执行删除命令后,所有数据将消失. 语法: DROP DATABAS ...

  6. 微信小程序(一)-工具创建和结构配置说明 Stable Build

    按装前特别说明: windows最好下载32位的,不然用到用到后面就出现"网络连接失败",然后就登录不上去了,打不开编辑器了! 问题 : 微信开发者工具网络连接失败, " ...

  7. vue项目配置 `webpack-obfuscator` 进行代码加密混淆

    背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...

  8. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  9. 学习java之基础语法(一)

    学习java之基础语法(一) 基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说 ...

  10. Flask:Jinjia模板

    Jinja2是Python下一个被广泛应用的模版引擎,他的设计思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能. 一.变量 1.1 手动传入的变量: 基本类型:{{ var }} 字 ...