Python 3 中如何使用 format 方法格式化字符串

介绍

Python的str.format()方法是 string 类的一部分,它允许您进行变量替换和值格式化。这使您能够通过位置格式化在字符串中连接元素。

本教程将指导您了解Python中格式化程序的一些常见用法,这可以使您的代码和程序更具可读性和用户友好性。

使用格式化程序

格式化程序通过在字符串中插入一个或多个替换字段或占位符(由一对花括号 {} 定义)并调用str.format()方法来工作。您将向该方法传递您想要与字符串连接的值。当运行程序时,该值将在与占位符相同位置传递。

让我们打印一个使用格式化程序的字符串:

print("Sammy has {} balloons.".format(5))
Sammy has 5 balloons.

在上面的例子中,我们构建了一个带有一对花括号的字符串作为占位符:

"Sammy has {} balloons."

然后,我们添加了str.format()方法并将整数5的值传递给该方法。这将在原始字符串中的花括号位置放置值5

Sammy has 5 balloons.

我们还可以将变量赋值为等于具有格式化程序占位符值的字符串:

open_string = "Sammy loves {}."
print(open_string.format("open source"))
Sammy loves open source.

在第二个例子中,我们将字符串"open source"与较大的字符串连接起来,替换原始字符串中的花括号。

Python中的格式化程序允许您使用花括号作为str.format()方法中将传递的值的占位符。

使用具有多个占位符的格式化程序

在使用格式化程序时,您可以使用多对花括号。如果我们想要在上面的句子中添加另一个变量替代,可以通过添加第二对花括号并将第二个值传递到方法中来实现:

new_open_string = "Sammy loves {} {}."                      #2 {} placeholders
print(new_open_string.format("open-source", "software"))    #通过逗号分隔,将2个字符串传递到方法中
Sammy loves open-source software.

为了添加另一个替代,我们在原始字符串中添加了第二对花括号。然后,我们通过逗号分隔地传递了两个字符串到str.format()方法中。

按照相同的语法,我们可以添加额外的替代:

sammy_string = "Sammy loves {} {}, and has {} {}."                      #4 {} placeholders
print(sammy_string.format("open-source", "software", 5, "balloons"))    #通过逗号分隔,将4个字符串传递到方法中
Sammy loves open-source software, and has 5 balloons.

sammy_string中,我们添加了4对花括号作为变量替代的占位符。然后,我们通过逗号分隔,将4个值传递到str.format()方法中,混合了字符串和整数数据类型。这些值之间由逗号分隔。

使用位置和关键字参数重新排序格式化程序

当我们在花括号中留空没有任何参数时,Python将按顺序替换通过str.format()方法传递的值。正如我们到目前为止所看到的,一个具有两个空花括号的格式构造,其中传递了两个值的方法如下:

print("Sammy the {} has a pet {}!".format("shark", "pilot fish"))
Sammy the shark has a pet pilot fish!

第一对花括号由字符串值"shark"替换,第二对由字符串值"pilot fish"替换。

存在于方法内的值如下所示:

("shark", "pilot fish")

它们本质上是 tuple 数据类型,元组中包含的每个值都可以通过其索引号进行调用,索引号从0开始。

我们可以将这些索引号传递到原始字符串中作为占位符的花括号中:

print("Sammy the {0} has a pet {1}!".format("shark", "pilot fish"))

在上面的例子中,输出将与我们不传递索引号到花括号中时得到的输出相同:

Sammy the shark has a pet pilot fish!

但是,如果我们反转用于占位符的参数的索引号,我们可以反转传递到字符串中的值:

print("Sammy the {1} has a pet {0}!".format("shark", "pilot fish"))
Sammy the pilot fish has a pet shark!

如果在元组中有索引位置0和1的值,并调用索引位置2,则会发生错误。当调用超出范围的索引号时,将收到错误消息:

print("Sammy the {2} has a pet {1}!".format("shark", "pilot fish"))
IndexError: tuple index out of range

我们看到的错误消息是指元组只在索引号0和1处具有值,因此将索引号2放在范围之外。

让我们添加一些额外的占位符和一些额外的要传递的值,以便更好地理解我们如何重新排序格式化程序。首先,这是一个具有四个占位符的新字符串:

print("Sammy is a {}, {}, and {} {}!".format("happy", "smiling", "blue", "shark"))
Sammy is a happy, smiling and blue shark!

没有参数的情况下,传递给str.format()方法的值按顺序连接到字符串中。

元组中包含的字符串值对应于以下索引号:

“happy”“smiling”“blue”“shark”
0123

让我们使用值的索引号来更改它们在字符串中出现的顺序:

print("Sammy is a {3}, {2}, and {1} {0}!".format("happy", "smiling", "blue", "shark"))
Sammy is a shark, blue, and smiling happy!

由于我们从索引号3开始,我们首先调用了值为"shark"的最后一个值。包含为占位符指定的其他索引号的参数会更改原始字符串中单词出现的顺序。

除了位置参数外,我们还可以引入通过其关键字名称调用的关键字参数:

print("Sammy the {0} {1} a {pr}.".format("shark", "made", pr="pull request"))
Sammy the shark made a pull request.

此示例显示了在位置参数与关键字参数一起使用关键字参数的用法。我们可以在关键字参数pr旁边填充关键字参数,并可以移动这些参数以更改生成的字符串:

print("Sammy the {pr} {1} a {0}.".format("shark", "made", pr="pull request"))
Sammy the pull request made a shark.

与字符串格式化程序一起使用的位置和关键字参数使我们能够通过重新排序来更好地操作原始字符串。

指定类型

我们可以在语法的花括号内包含更多的参数。我们将使用格式代码语法{field_name:conversion},其中field_name指定我们在重新排序部分中讨论过的str.format()方法的参数的索引号,conversion是您在与格式化程序一起使用的数据类型的转换代码。

转换类型指的是Python使用的单字符类型代码。我们将在此处使用的代码有s表示字符串,d表示显示十进制整数(10进制),以及我们将使用的f表示带小数点的浮点数。您可以通过Python 3的官方文档阅读有关格式规范微语言的更多信息。

让我们看一个例子,其中有一个整数通过该方法传递,但我们希望它以浮点数的形式显示,通过添加f转换类型参数:

print("Sammy ate {0:f} percent of a {1}!".format(75, "pizza"))
Sammy ate 75.000000 percent of a pizza!

我们使用了{field_name:conversion}的语法,用于第一个花括号替换字段以输出浮点数。第二个花括号仅使用第一个参数{field_name}

在上面的例子中,小数点后显示了很多数字,但是您可以将这些数字限制为较少的数字。当指定f以显示浮点数值时,可以通过在转换类型f之前包含一个完整停止符.,后跟您要包含的小数点后的数字来指定该值的精度。

如果 Sammy 吃了 75.765367% 的披萨,但我们不需要高精度,我们可以通过在转换类型f之前添加.3来将小数点后的位数限制为3:

print("Sammy ate {0:.3f} percent of a pizza!".format(75.765367))
Sammy ate 75.765 percent of a pizza!

如果我们只想要一个小数位数,我们可以像这样重写字符串和方法:

print("Sammy ate {0:.1f} percent of a pizza!".format(75.765367))

Sammy ate 75.8 percent of a pizza!

请注意,修改精度会导致数字四舍五入。

虽然我们将数字显示为不带小数点的浮点数,但如果我们尝试使用d转换类型将浮点数更改为整数,则会收到错误:

print("Sammy ate {0:d} percent of a pizza!".format(75.765367))
ValueError: Unknown format code 'd' for object of type 'float'

如果您不希望显示小数点后的位数,可以像这样编写您的格式化程序:

print("Sammy ate {0:.0f} percent of a pizza!".format(75.765367))
Sammy ate 76 percent of a pizza!

上述示例将浮点数更改为整数,而不是将浮点数转换为整数,但会限制小数点后的位数。

填充变量替换

由于占位符是替换字段,因此可以通过在附加参数后通过增加字段大小来填充或在元素周围创建空间。当我们需要在视觉上组织大量数据时,这可能非常有用。

我们可以在冒号:后在我们的语法的花括号中添加数字来指示字段大小(以字符为单位):

print("Sammy has {0:4} red {1:16}!".format(5, "balloons"))
Sammy has    5 red balloons        !

在上面的例子中,我们为数字5指定了一个字符字段大小为4,并为字符串balloons指定了一个字符字段大小为16(因为它是一个很长的字符串)。

正如我们所看到的,默认情况下,字符串在字段内左对齐,而数字在字段内右对齐。您可以通过在冒号后添加一个对齐代码来修改此设置。<将在字段中左对齐文本,^将文本居中在字段中,>将文本右对齐。

让我们将数字左对齐并将字符串居中:

print("Sammy has {0:<4} red {1:^16}!".format(5, "balloons"))
Sammy has 5    red     balloons    !

现在我们看到5是左对齐的,提供了在red之前的字段中的空间,balloons在其字段中居中,其左右都有空间。

默认情况下,使用格式程序扩大字段时,Python将字段填充为空格字符。我们可以通过在冒号后直接跟随一个字符来修改为不同的字符:

print("{:*^20s}".format("Sammy"))
*******Sammy********

我们正在接受传递给str.format()的字符串在索引位置0处,因为我们没有指定其他参数,包括冒号,并指定我们将使用*而不是空格来填充字段。我们正在使用^居中字符串,指定字段的大小为20,并且还指示我们正在处理字符串转换类型,通过包含s

我们可以将这些参数与我们之前使用过的其他参数结合使用:

print("Sammy ate {0:5.0f} percent of a pizza!".format(75.765367))
Sammy ate    76 percent of a pizza!

在花括号内的参数中,我们指定了浮点数的索引字段号,并包含了冒号,指定字段大小的数字,加上小数点,写入小数点后的位数,然后指定转换类型为f

使用变量

到目前为止,我们已经将整数,浮点数和字符串传递到str.format()方法,但是我们也可以传递变量。这与任何其他变量一样。

nBalloons = 8
print("Sammy has {} balloons today!".format(nBalloons))
Sammy has 8 balloons today!

我们可以为原始字符串和传递到方法中的内容使用变量:

sammy = "Sammy has {} balloons today!"
nBalloons = 8
print(sammy.format(nBalloons))
Sammy has 8 balloons today!

变量可以轻松替代我们的格式化程序语法结构的每个部分。这使得在接受用户生成的输入并将这些值分配给变量时更容易处理。

使用格式化程序组织数据

当使用格式化程序来进行变量替换时,可以有效地对字符串进行连接和组织值和数据。格式化程序在将字符串连接在一起的同时提供了一种基本但非描述性的方式,并且在确保输出可读且用户友好时非常有用。

让我们看一下Python中的一个典型的for循环,它将在3到12范围内打印出ii*ii*i*i

for i in range(3, 13):print(i, i * i, i * i * i)
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
11 121 1331
12 144 1728

虽然输出在某种程度上是有组织的,但数字会溢出到彼此的列中,使底部的输出不太可读。如果您正在处理具有许多小数和大数字的更大数据集,这可能会带来问题。

让我们使用格式化程序来为这些数字提供更多的空间:

for i in range(3, 13):print("{:3d} {:4d} {:5d}".format(i, i * i, i * i * i))

在这里,我们在花括号中没有添加索引号的字段名,并且从冒号开始,后跟字段大小的数字和一个d转换类型,因为我们正在处理整数。在此示例中,我们为每个预期输出的大小提供了2个额外的字符空间,具体取决于可能的最大数字大小,因此我们的输出如下:

  3    9    274   16    645   25   1256   36   2167   49   3438   64   5129   81   72910  100  100011  121  133112  144  1728

我们可以指定一个一致的字段大小数字,以确保有均匀的列,确保我们适应更大的数字:

for i in range(3, 13):print("{:6d} {:6d} {:6d}".format(i, i * i, i * i * i))
     3      9     274     16     645     25    1256     36    2167     49    3438     64    5129     81    72910    100   100011    121   133112    144   1728

我们还可以通过在冒号后添加<^>进行文本对齐,将d更改为f以添加小数点,更改字段名索引号,以确保我们按预期显示数据。

结论

使用格式化程序进行变量替换可以是连接字符串和组织值和数据的有效方法。格式化程序以一种基本但非描述性的方式表示将变量替换到字符串中的过程,并且在确保输出可读且用户友好时非常有用。

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

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

相关文章

JS-var 、let 、 const使用介绍

变量声明介绍 在我们日常开发用&#xff0c;变量声明有三个 var、 let 和 const&#xff0c;我们应该用那个呢&#xff1f; 首先var 先排除&#xff0c;老派写法&#xff0c;问题很多&#xff0c;可以淘汰掉…let or const ?建议&#xff1a; const 优先&#xff0c;尽量使…

【AI工具】使用 Whisper ASR 和 Pyannote 进行说话人分类

目录 前言 什么是说话人二值化? 什么是扬声器嵌入? 扬声器嵌入的关键作用 说话人分类系统的工作原理 执行

GPT-4 现在是否已经足够划算?

我通常使用 GPT 的方式是&#xff0c;先用 GPT-4 来快速搭建一个原型&#xff0c;然后不断优化&#xff0c;直到解决方案能够在 GPT-3.5 模型上运行。 这个方法在我的实践中非常高效&#xff0c;它的一个重要好处是能迅速筛选出那些“行不通”的项目——如果你在几天内都无法使…

Unity3D学习之UI系统——GUI

文章目录 1. 前言2. 工作原理和主要作用3. 基础控件3.1 重要参数及文本和按钮3.1.1 GUI 共同点3.1.2 文本控件3.1.3 按钮控件 3.2 多选框和单选框3.2.1 多选框3.2.2 单选框3.2.3 输入框3.2.4 拖动条 3.3 图片绘制和框3.3.1 图片3.3.2 框绘制 4 工具栏和选择网格4.1 工具栏4.2 选…

JWT 入门级教程

下面内容参考文章JWT详细讲解(保姆级教程)-阿里云开发者社区 (aliyun.com) 1.什么是JWT&#xff1f; JSON Web Token&#xff08;JWT&#xff09; 是一种开放标准 &#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且独立的方式&#xff0c;用于作为 JSON 对象在…

Django用户注册和用户配置扩展

本篇是在完成用户登录登出&#xff0c;密码修改功能后&#xff0c;扩展用户注册功能。 关于用户登录、注销、更改密码和重置密码。请查看 Django身份验证初试-CSDN博客 Django登录注销视图-CSDN博客 Django密码修改和重置视图-CSDN博客 用户注册 创建一个表单&#xff0c…

Angular系列教程之路由守卫

文章目录 前言路由守卫的类型CanLoadCanActivateCanActivateChildCanDeactivateResolve总结 前言 在Angular中&#xff0c;路由守卫是一个非常有用的功能&#xff0c;可以帮助我们控制用户在导航过程中的权限和访问限制。通过使用路由守卫&#xff0c;我们可以拦截导航并根据需…

openssl3.2 - 官方demo学习 - signature - EVP_EC_Signature_demo.c

文章目录 openssl3.2 - 官方demo学习 - signature - EVP_EC_Signature_demo.c概述笔记END openssl3.2 - 官方demo学习 - signature - EVP_EC_Signature_demo.c 概述 EC的签名/验签实现, 摘要算法为 SHA3-512 签名验签时的update铭文可以进行多次. openssl的API封装的真好, 只…

python PyQt5的学习

一、安装与配置 1、环境&#xff1a; python3.7 2、相关模块 pip install pyqt5 pyqt5-tools pyqt5designer 可以加个镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple3、配置设计器 python的pyqt5提供了一个设计器&#xff0c;便于ui的设计 界面是这样的&#xff1a…

springboot实现微信小程序授权登录前后端代码完整版

一个简单的微信授权登录的demo&#xff0c;我这边没有建表&#xff0c;是存到redis里面了&#xff0c;仅供参考&#xff0c;后续可以扩展自己的业务逻辑&#xff0c;把登录信息存在表里面。 前端小程序代码&#xff1a; <view><view class"login-icon">…

ABAP - 读取长文本优化

做程序优化的时候发现在循环里面读取长文本&#xff0c;用&#xff08;READ_TEXT\类的方法&#xff09;读取太消耗性能了&#xff0c;于是用读取底表的方法去取。 DATA lt_stxl_raw TYPE TABLE OF ty_stxl_raw.DATA ls_stxl_raw TYPE ty_stxl_raw.DATA lt_tline TY…

MFC为资源对话框添加消息处理函数和初始化控件

现在我VC6新建了一个对话框工程&#xff1b;又在资源添加了一个新的对话框&#xff0c;并为新的对话框添加了名为CTestDlg的类&#xff1b; 在主对话框的cpp文件包含#include "TestDlg.h"&#xff1b; 在主对话框的cpp文件的OnInitDialog()成员函数中&#xff0c;添…

算法之回溯动态规划贪心

回溯使用场景&#xff1a;求出所有可能的解。 List result; void backtrack(路径,选择列表){if(满足结束条件){result.add(路径);return;}for(选择:选择列表){// 遍历集合中的元素做选择;backtrack(路径,选择列表);撤销选择;} }动态规划使用场景&#xff1a;寻求最优解。 #初…

单列的堆叠柱状图

目的 MSingleColumnStackBarChart类被设计用于创建只有单列的堆叠柱状图&#xff0c;用于血糖数据的统计。以下是封装这个类的目的的详细描述&#xff1a; 抽象复杂性&#xff1a; 通过创建MSingleColumnStackBarChart类&#xff0c;你将复杂的MPAndroidChart库的使用和配置封…

12166 - Equilibrium Mobile (UVA)

题目链接如下&#xff1a; Online Judge 一个很简洁的写法&#xff1a;UVa 12166 Equilibrium Mobile——思路题_equilibrium mobile uva - 12166-CSDN博客 才33行&#xff0c;真的NB坏了…… 我的比较繁琐的代码&#xff08;能AC&#xff09;&#xff0c;比较之下就能发现…

VUE---组件的样式冲突scoped

默认情况 &#xff1a;写在组件中的样式会 全局生效 &#xff0c;因此很容易造成多个组件之间的样式冲突问题。 1、 全局样式 &#xff1a; 默认组件中的样式会作用到全局 2、 局部样式 &#xff1a; 可以给组件加上 scoped 属性&#xff0c; 让样式只作用于当前组件 sc…

FastGPT + Xinference + OneAPI:一站式本地 LLM 私有化部署和应用开发

Excerpt 随着 GPTs 的发布,构建私有知识库变得无比简易,这为个人创建数字化身份、第二大脑,或是企业建立知识库,都提供了全新的途径。然而,基于众所周知的原因,GPTs 在中国的使用依然存在诸多困扰和障碍。因此,在当… 随着 GPTs 的发布,构建私有知识库变得无比简易,这…

React全局状态管理

redux是一个状态管理框架&#xff0c;它可以帮助我们清晰定义state和处理函数&#xff0c;提高可读性&#xff0c;并且redux中的状态是全局共享&#xff0c;规避组件间通过props传递状态等操作。 快速使用 在React应用的根节点&#xff0c;需要借助React的Context机制存放整个…

深入探讨 Go 语言中的 Map 类型

深入探讨 Go 语言中的 Map 类型 Go 语言中的 map 类型是一种非常强大且常用的数据结构&#xff0c;它提供了一种键值对的映射关系。本篇博客将深入讨论 Go 中的 map 类型&#xff0c;包括其基本用法、特性、以及一些最佳实践。 基本概念 1. 声明和初始化 在 Go 中&#xff…

mobi文件怎么转换成pdf?

mobi文件怎么转换成pdf&#xff1f;在数字化时代&#xff0c;电子书籍成为了越来越受欢迎的阅读方式。我们可以通过多种格式的电子书来获取知识和娱乐&#xff0c;其中一种常见的格式就是Mobi文件。Mobi文件是亚马逊公司开发的一种电子书格式&#xff0c;它主要用于Kindle设备和…