【Python】字符串格式化前世今生

news2024/10/4 12:36:31

▒ 目录 ▒

    • 🛫 问题
      • 描述
      • 环境
    • 1️⃣ 《%》方式格式化
      • 语法
      • %后面的参数说明
    • 2️⃣ str.format
      • 优点
      • 指定位置:参数可以不按顺序
      • 关键字参数
      • 列表索引
      • 对象
      • 数字格式化
    • 3️⃣ f-string
      • 语法
      • 语法示例
      • 格式化一个表达式
      • 转义符号
      • 格式化 datetime 对象
    • 🛬 结论
    • 📖 参考资料

🛫 问题

描述

作为开发语言中常见的功能字符串格式,python可谓是煞费苦心,从python2开始到目前,不断的增强字符串格式化的功能,今天就汇总一下。

环境

版本号描述
文章日期2023-06-28
操作系统Win11 - 21H2 - 22000.1335
Python3.7.1
frida.exe15.0.18

1️⃣ 《%》方式格式化

《%》作为Python2.6 之前,格式化字符串的方式,它也是兼容所有版本的一种字符串格式化方法。
在这里插入图片描述

语法

Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C语言sprintf 函数一样的语法。

python 字符串格式化符号
在这里插入图片描述
格式化操作符辅助指令
在这里插入图片描述

%后面的参数说明

参数一般以元组的形式传值。“xxxx %s %s” % (value, value2)
当只哟一个参数的时候,可以直接传参:"xxxx %s " % value
不过建议提供一个单元素元组,就像"xxxx %s " % (value,)
在这里插入图片描述

2️⃣ str.format

Python2.6 之后的,str增加了format函数,用于格式化字符串。
基本语法是通过 {} 和 : 来代替以前的%

优点

  1. 在%方法中%s只能替代字符串类型,而在format中不需要理会数据类型;
  2. 单个参数可以多次输出,参数顺序可以不相同;
  3. 填充方式十分灵活,对齐方式十分强大;
  4. 官方推荐用的方式,%方式将会在后面的版本被淘汰。

指定位置:参数可以不按顺序

>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
 
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
 
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'

关键字参数

print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
 
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))

列表索引

# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的

对象


class AssignValue(object):
    def __init__(self, value):
        self.value = value
my_value = AssignValue(6)
print('value 为: {0.value}'.format(my_value))  # "0" 是可选的

数字格式化

>>> print("{:.2f}".format(3.1415926))
3.14

各种不同的格式如下图:
在这里插入图片描述

3️⃣ f-string

f-string是2015年python 3.6 根据PEP 498新添加的一种字符串格式化方法,f-string实际上是在运行时计算的表达式,而不是常量值。
和JavaScript等语言的语法很像。

语法

f-string采用 {content:format} 设置字符串格式。

  • content 是替换并填入字符串的内容,可以是变量、表达式或函数等
  • format 是格式描述符。采用默认格式时不必指定 {:format}
  • 如上面例子所示只写 {content} 即可

使用f-string格式化字符串十分简单。唯一的要求就是给它一个有效的表达式。f-string 也可以用大写F开头或者与 r 原始字符串结合使用。但是你不能将其与 b”” 或者 ”u” 混用。
在这里插入图片描述

关于这个format的格式,我们依然使用前面的方法二种format来格式化字符串的顺序来说明,也是按照下面这6个主要方面:
<填充><对齐><宽度><,><.精度><类型>6 个字段,但是还有所拓展

format_spec  格式:   [[fill]align][sign][#][0][width][grouping_option][.precision][type]
即format一般的格式为
[填充字符][对齐方式][数字的正负号显示][#][0][宽度][千分位分组符号][.小数精度][类型]
 
(1)填充 fill :     可以是任何的字符
(2)对齐 align:     "<" | ">" | "=" | "^"
(3)符号 sign :     这个仅仅对数值有效 "+" | "-" | " "
(4)宽度 width:     是一个整数数值,表示多少宽度
(5)grouping_option:表示千分位的分隔符号,可以是  "_" | ","
(6)精度 precision : .数字 
(7)类型 type :     "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

语法示例

>>> book = "The dog guide"
>>> num_pages = 124
>>> f"The book {book} has{num_pages} pages"
'The book The dog guide has 124 pages'
 
 
>>> F"The book {book} has{num_pages} pages"
'The book The dog guide has 124 pages'
>>> print(Fr"The book {book} has{num_pages} pages\n")
The book The dog guide has 124 pages\n 
 

>>> print(FR"The book {book} has{num_pages} pages\n")
The book The dog guide has 124 pages\n
>>> print(f"The book {book} has{num_pages} pages\n")
The book The dog guide has 124 pages

格式化一个表达式

>>> f"4 * 4 is {4 * 4}"
'4 * 4 is 16'
 

>>> n = 4
>>> f"4 * 4 is {n * n}"
'4 * 4 is 16'

转义符号

>>> hello = "world"
>>>f"{{hello}} = {hello}"
'{hello} = world'
 
>>>f"{hello} = \"hello\""
'world = "hello"'

格式化 datetime 对象

F-string也支持datetime对象的格式化。其过程与str.format格式化日期的方法很近似。请查阅官方文档中的表格获取更多所支持格式的相关信息。
在这里插入图片描述

>>> import datetime
>>> now = datetime.datetime.now()
>>> ten_days_ago = now -datetime.timedelta(days=10)
>>> f'{ten_days_ago:%Y-%m-%d %H:%M:%S}'
 
 
'2020-10-13 20:24:17'
>>> f'{now:%Y-%m-%d %H:%M:%S}'
'2020-10-23 20:24:17'

🛬 结论

以上三种方案各有有缺,使用上小编剧认为需要注意一下几点:

  • %方式:历史方案,使用不够灵活,除非特殊要求,避免使用。
  • str.format方式:已经足够强大,而且支持python版本很多,十分推荐
  • f-string方式:从3.6之后才开始使用,如果自己开发三方库,请勿使用,避免低版本无法使用的问题。

📖 参考资料

  • 官网string文档 https://docs.python.org/3/library/string.html
  • Python format 格式化函数 https://www.runoob.com/python/att-string-format.html
  • python字符串格式化深入详解(四种方法) https://blog.csdn.net/qq_27825451/article/details/105652244
  • 这有 73 个例子,彻底掌握 f-string 用法! https://blog.csdn.net/chinesehuazhou2/article/details/110016578

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/699624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#传Bitmap到C++dll出现灰色图片的问题

如果直接将内存中的Bitmap 传给C,原图会失去颜色&#xff0c;如下&#xff1a; 代码如下&#xff1a; ImageCodecInfo jpgEncoder GetEncoder(ImageFormat.Jpeg);System.Drawing.Imaging.Encoder myEncoder System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncod…

给若依添加单元测试(二)

给若依添加单元测试 方案一&#xff08;简单&#xff09; 方案二&#xff08;异常困难但企业开发一般用这个&#xff09; 在 activity 子模块中添加单元测试 S1.在 src 目录下创建 test.java.MapperTests 文件 S2.将以下内容复制进去 import com.ruoyi.activity.Activity…

C#私有构造函数学习

私有构造函数是一种特殊的实例构造函数。 它通常用在只包含静态成员的类中。 如果类具有一个或多个私有构造函数而没有公共构造函数&#xff0c;则其他类&#xff08;除嵌套类外&#xff09;无法创建该类的实例。 如果类T只声明了私有实例构造函数&#xff0c;则在T的程序文本外…

java项目之留学生交流互动论坛网站ssm源码

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的留学生交流互动论坛网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xf…

python编码中常见问题及解决方案

文章目录 1. 输入minVal和maxVal&#xff0c;将 minVal - maxVal 分成 N 等份&#xff0c;列表返回2. request 请求MP4视频URL时&#xff0c;如何获取视频大小3. 输出00&#xff0c;01&#xff0c;02或001&#xff0c;002&#xff0c;003等格式字符串 1. 输入minVal和maxVal&am…

UE5 Stride Warping Orientation Warping功能学习

在UE5的 Lyra Demo中&#xff0c;运用到了各类动画Warping&#xff08;动画扭曲&#xff09;技术&#xff0c;通过各类Warping节点在动画蓝图中的合理组织&#xff0c;可以有效的解决运动滑步问题&#xff0c;并为动画增添更多细节。 本文主要基于Animation Warping插件讲一下…

vue echarts k线图 标记点根据条件设置颜色

1. 数据格式{属性1, 属性2, 属性3, 属性4{属性4.1, 属性4.2, 属性4.3}} {symbol: circle, symbolSize: 0,xAxis: 2023-01-01 08:36:00, yAxis: 0.06968924, label: {fontStyle: normal, fontSize: 13, color: blue} } 2. 自定义局部function 拼装数据 // data 是 自定义标记点…

element-ui el-tree功能应用

1.目录节点搜索功能&#xff1a; <el-tree>:filter-node-method"filterNode"</el-tree>//添加监听watch: {search(val) {this.$refs.tree.filter(val)}},// 树搜索filterNode(value, data) {if (!value) return truereturn data.name.indexOf(value) ! -…

安装MySQL实现远程访问链接---无需本地访问

文章目录 1. 安装Mysql2. 安装phpMyAdmin3. 修改User 表4. 本地测试连接5. 安装cpolar6. 配置公网访问地址7. 固定连接公网地址 转载自cpolar极点云文章&#xff1a;群晖NAS 安装 MySQL远程访问连接 群晖安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一…

mysql索引之B+树

1.概述 提到B树就不得不提及二叉树&#xff0c;平衡二叉树和B树这三种数据结构了。B树就是从他们三个演化来的。众所周知B树是一种常见的数据结构&#xff0c;被广泛应用于数据库和文件系统等领域&#xff0c;B树的设计目标是保持树的平衡性&#xff0c;以提供稳定的性能&…

磐石呼叫中心系统经常被UDP攻击的解方法

语音系统经常被UDP攻击&#xff0c;UDP攻击是一种常见的网络攻击形式&#xff0c;经常针对语音、视频和在线游戏等实时传输数据的应用程序。攻击者使用大量的UDP数据包向目标服务器发送请求&#xff0c;导致服务器过载&#xff0c;使其无法处理有效的请求&#xff0c;从而导致服…

01-基本数据类型和注释

基本数据类型 使用编程语言进行编程时&#xff0c;需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置。这意味着&#xff0c;当您创建一个变量时&#xff0c;就会在内存中保留使用一些空间。 您可能需要存储各种数据类型&#xff08;比如字符型、整型、浮…

C++数据结构笔记(3)线性表的链式存储底层实现

本系列的帖子并不包含全部的基础知识&#xff0c;只挑一部分最核心的知识点总结&#xff0c;着重于具体的实现细节而并非理论的知识点总结&#xff0c;大家按需阅读学习。 链表的核心概念总结如下&#xff1a; 1.链式存储不需要连续的内存空间 2.链表由一系列的结点组成&…

阿里云ECS U实例评测

参与ECSU实例评测&#xff0c;申请免费体验机会&#xff1a;https://developer.aliyun.com/mission/review/ecsu What u1实例是什么&#xff1f; u1实例本质上还是ecs服务器&#xff0c;但是是阿里云推出的一种新型实例规格族 阿里云根据使用场景和业务场景将ecs划分为不同的…

如何使用低代码推动企业数字转型

企业创建其所需数字解决方案的方式和速度正在发生历史性变化。企业可以通过各种方式来实现这一转型&#xff0c;低代码作为其中一种转型方式&#xff0c;也越来越受到企业的喜欢&#xff0c;帮助企业适应不断变化的条件。下面我们用天翎低代码平台为例&#xff0c;浅谈一下&…

人脸考勤签到升级篇

目录 编写签到成功页面&#xff08;移动端&#xff09; 实现考勤成功页面&#xff08;持久层&#xff09; 实现考勤成功页面&#xff08;业务层&#xff09; 实现考勤成功页面&#xff08;Web层&#xff09; 一、查询用户的入职日期 二、实现查询考勤结果的Web方法 实现…

8年资深测试总结,性能测试-性能内存详解,揭秘你的疑惑...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 缓存 从 free 命令…

python实现基于SVD矩阵分解的电影推荐系统设计

大家好&#xff0c;我是带我去滑雪&#xff01; SVD 是一种矩阵分解技术&#xff0c;通过将空间维数从 N 维降到 K 维&#xff08;其中K<N&#xff09;来减少数据集的特征数。在推荐系统中&#xff0c;SVD 被用作一种协同过滤技术。使用矩阵结构&#xff0c;其中行表示用户&…

CC2530 外部中断配置步骤

第一章 硬件原理图分析 第二章 配置按键中断步骤

Python:通过飞书API接口发送通知消息

通过飞书发送应用消息&#xff0c;及时收到线上异常消息 总的来说&#xff0c;飞书消息发送的前戏&#xff0c;要比企业微信和钉钉稍复杂 相关连接 官网 https://www.feishu.cn/管理后台 https://www.feishu.cn/admin开放平台 https://open.feishu.cn/ 参数准备 首先&…