详解Python中的str.format方法

news2025/4/13 9:23:29

字符串的内置方法大致有40来个,但是一些常用的其实就那么20几个,而且里面还有类似的用法,区分度高比如:isalpha,isalnum,isdigit,还有一些无时不刻都会用到的split切分,join拼接,strip首尾去指定字符,作用无非就是围绕字符串的增删改查来进行,本人认为要弄清楚和熟练使用这些常用的方法,一方面需要在理解的基础上多多练习多多回顾,同时在工作使用中去巩固,加深记忆。忘记没关系,善于总结归纳,善于对自己大脑记忆的‘增删改查’才是重点。

str.format的意义:

作为一个初学者,最近发现字符串中最繁杂的一个方法莫过于:str.format()了,format见名思义,格式化,格式化完为了干嘛,其实就是为了得到我们需要格式的数据,也就是格式化输出,格式化输出我们一开始学习的是用%s、%d来实现,但是这种方法有很多局限性,比如%s是按照位置格式化输出,局限性显而易见,如果一次性格式化输出太多,还是根据位置来输出的话就太容易出错了。所以更精确的一种格式化输出方法就是str.format()

str.format方法介绍:

1、通过字符串中的花括号{}来识别替换字段,从而完成字符串的格式化。

2、替换的内容包括:字段名、格式说明符三部分,形式一般为:{字段名:格式说明符}

以上是简介,下面是干货:

具体实现:

1、简单实现方法:

(1)省略不写{} ____写法类似%s按位置格式化输出

(2)数字{十进制非负整数} ____写法类似依据位置索引传参

(3)变量名{关键字} ____写法类似关键字参数传参

(4)可以混合使用

1.1 省略不写:花括号内省略不写,代表传递位置参数

替换字段形式{}

注意事项:花括号个数少于等于后面的位置参数的个数,多了肯定报错。

# 用{}代表占位符,直接位置传参
print('我是{},喜欢{}!'.format('灭霸','打响指'))
# 我是灭霸,喜欢打响指!
# {}数量必须少于后面位置参数数量,不然报错
print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头','放空大','小短腿'))
print('我是{},喜欢{},不喜欢{}。'.format('宙斯','放大抢人头'))
# 报错误:IndexError: tuple index out of range

1.2 数字形式传参:通过位置索引值传递位置参数

索引从整数0开始

索引可以重复引用,输出

索引数值就是后面位置参数放入一个元组来取值的过程,所以索引数值不能大于元组里面位置参数的索引值,否则报错

print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18,'15cm'))
# 我身高180cm,年龄正好18,15cm长。
print('我身高{0},{0}不多不少,年龄正好{1}。'.format('180cm',18))
# 我身高180cm,180cm不多不少,年龄正好18。
print('我身高{0},年龄正好{1},{2}长。'.format('180cm',18))
# IndexError: tuple index out of range

1.3 变量名{关键字} 传递输出参数

想想关键字参数怎么传参,类比一下,bingo!

特别注意,关键字的变量名在参数那里无需加引号,同时{}里面引用直接填变量名。

print('我的名字叫{name},我其实是一名{career}!'.format(name='尹天仇',career='演员'))
# 我的名字叫尹天仇,我其实是一名演员!
print('我叫{name2},又名{name1},我弟弟叫{name3}!'.format(name1='至尊宝',name2='秦汉',name3='秦祥林'))
# 我叫秦汉,又名至尊宝,我弟弟叫秦祥林!

1.4 {}、{0}、{name}混合使用

位置参数在前,关键字参数在后

{}不能与数字形式{0}同时使用。

print('吹个{0},吹个{2},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹个大气球,吹大了气球,玩球球!
print('吹个{},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹大了气球,玩球球!
print('吹个{0},吹大了{1},玩{ball}!'.format('球','气球','大气球',ball='球球'))
# 吹个球,吹大了气球,玩球球!
print('吹个{0},吹大了{},玩{ball}!'.format('球','气球','大气球',ball='球球'))
#报错 ValueError: cannot switch from manual field specification to automatic field numbering

2、使用元组和字典传参:

str.format()方法可以使用*元组和**字典的形式传参,可以混用。

方法相当于*args和**kwargs打散传参,元组按位置或索引传参,字典按关键字传参。

位置参数、关键字参数、*元组、**字典也可以同时使用,但要注意位置参数在关键字参数前,*元组要在**字典前。

# 元组
print('我喜欢{},喜欢{},同时也喜欢{}!'.format(*('篮球','足球','观球')))
# 我喜欢篮球,喜欢足球,同时也喜欢观球!
print('我喜欢{0},喜欢{1},同时也喜欢{2}!'.format(*('篮球','足球','观球')))
# 我喜欢篮球,喜欢足球,同时也喜欢观球!
# 字典
print('{name}的女朋友是{gf},我也喜欢{gf}!'.format(**{'name':'钢铁侠','gf':'小辣椒'}))
# 钢铁侠的女朋友是小辣椒,我也喜欢小辣椒!
# 元组+字典
print('我是{beauty}的{1},我们都喜欢{0},请大家{2}!'\
      .format(*('球类','球迷','文明观球'),**{'beauty':'斯嘉丽约翰逊',}))
# 我是斯嘉丽约翰逊的球迷,我们都喜欢球类,请大家文明观球!
# 位置参数、关键字参数、元组、字典混合使用:
print('我是{name},好像{age}了 ^_^,在{0},等你哦!\n喜欢{1}、{2}和{3}。\n我的唯一 >>>:{only_one}\n我的小可爱 >>>: {love}!'\
      .format('武汉',name='苏光体',age=18,*('读书','健身','折腾数码'),**{'only_one':'杨林','love':'苏弘睿'}))
# 我是苏光体,好像18了 ^_^,在武汉,等你哦!
# 喜欢读书、健身和折腾数码。
# 我的唯一 >>>:杨林
# 我的小可爱 >>>: 苏弘睿!

使用元组或者字典格式化输出的形式就是相当于将元组和字典打散,变成位置参数们和关键字参数们然后按照前面的方法传参就行。

3、对象参数格式化输出传值:

formate还可以使用对象属性传参,这个对象可以是实例化的对象,也可以是列表、字典。

# 对象属性传参
# 实例化对象:
class Dog:
    def __init__(self,name,speak):
        self.name=name
        self.speak=speak
dog1=Dog('小黄','汪汪汪')
print('我的{0.name}会{0.speak}。'.format(dog1))
# 我的小黄会汪汪汪。
# 文件对象
with open('text.txt','wb') as f:
    print('打开的文件名为:{0.name}'.format(f))
# 打开的文件名为:text.txt
# 列表、字典对象
print('I have a {0[0]} , I have a {0[1]} .'.format(['Apple','Pen']))
print('我叫{0[name]},{0[id]}就是我!'.format({'name':'阿星','id':'9527'}))
print('{1[name]}变成了{0[0]},藏进了{1[role]}的裤裆里,为什么不变{0[1]}而是{0[0]}呢?'.format(['葡萄','苹果'],{'name':'菩提老祖','role':'至尊宝'}))
# I have a Apple , I have a Pen .
# 我叫阿星,9527就是我!
# 菩提老祖变成了葡萄,藏进了至尊宝的裤裆里,为什么不变苹果而是葡萄呢?

4、格式说明符:规定传入参数字符的格式

比如:

print('{0:.4f}'.format(3.1415926))
#在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416

说明符格式标准:[填充]对齐方式][正负号][#][0][宽度][分组选项][.精度][类型码]   同时存在是有顺序之分的,具体使用下面有具体示例:

填充:

(1)填充字符只能有一个

(2)不指定默认用空格填充

(3)如果指定填充字符,则必须要同时指定对齐方式

对齐方式:

(1)<    左对齐

(2)>    右对齐

(3)^    居中对齐

(4)=    在正负号和数字之间填充(仅对数字类型有效)可以输出类似:+00000012的字符串。

正负号:

(1)仅对数字类型生效

(2)+ - 正负号

(3)空格:正数前面需要添加一个空格,以便与负数对齐

宽度width

(1)不指定宽度,宽度由内容决定

(2)宽度前有0,意味着用0填充,等价于 0=的填充和对齐方式

精度

(1)指小数点后面展示的小数位数。

(2)对于非数字类型,指字段宽度。

(3)整数类型不能指定精度,会报错的。

下面看示例吧:

#在传入参数后面用冒号:写入规定的格式:.4f(取4位小数) 结果为:3.1416
# 填充、对齐、宽度
print('{0:人>2}'.format('<我是谁>'))   # 宽度不够,按实际字符显示
print('{0:人<11}'.format('<我>'))
print('{0:人^11}'.format('<我>'))
# <我是谁>
# <我>人人人人人人人人
# 人人人人<我>人人人人
# 正负号、精度
print('{0:*=+10.4f}'.format(3.1415926))  # '*'>填充符,'='>指定在正负号和数字之间填充,'10'>宽度,'.4f'>精度
print('{0:*>+10.4f}'.format(3.1415926))  # 同上,'>'>右对齐
# +***3.1416
# ***+3.1416
print('{0:&>10.4f}'.format(3.1415926))
print('{0:&<10.4f}'.format(3.1415926))
print('{0:&>10.4}'.format('我是中国人'))  # 精度为4,去字符串中的前4个字符
# &&&&3.1416
# 3.1416&&&&
# &&&&&&我是中国

类型码(规定输出的数据类型)

(1)字符串类型

(2)整数类型

(3)浮点数类型

# 字符串类型(默认类型,忽视)
print('{0:s}'.format('abc'))    # abc
print('{0:}'.format('abc'))     # abc
# 整数类型
# b 二进制|c Unicode字符|d 十进制整数|还有很多比如o八进制|x十六进制...等等
print('{0:b}'.format(101))     # 1100101
print('{0:c}'.format(101))     # e
print('{0:d}'.format(666))     # 666
# 浮点数字类型
# e 科学计数(默认精度6位)
print('{0:e}'.format(31415926))   # 3.141593e+07
# f 定点记法(默认精度6位)
print('{0:f}'.format(3.1415926))   # 3.141593

以上例子可以说不太全面,只是大概举了几个常见的,除了e,f类型还有g通用类型,n number类型,对于日常使用的话并不常用。所以不一一列出。

5、其他补充:

花括号本事如需格式化输出,可以用外套2层花括号转义解决

print('{{0}}'.format('abc'))       # {0}
print('{{{0}}}'.format('abc'))     # {abc}

一些另类格式化输出:

from datetime import datetime
print('今天是:{0:%Y-%m %H:%M}'.format(datetime.now()))
# 结果:
今天是:2019-05 15:10

总结:

str.format()格式化输出方法可以说是%s的加强型,特别是在处理更复杂的格式化输出过程时候,可以更精确的进行达到输出目的,它集成的方法可以说比较繁杂,很多方法个人认为用处不大,仅仅是锦上添花的作用,个人认为只要掌握前面几个简单的位置参数、关键字参数、元组、字典的传参形式的格式化输出就可以了。后面的方法可以有,但是不建议进行强行记忆,因为精力有限,用时再打开翻翻也就明了。

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

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

相关文章

深度学习:Pytorch安装的torch与torchvision的cuda版本冲突问题与解决历程记录

今天不小心将conda环境中的一个pytorch环境中的torch包给搞混了&#xff0c;将其更新了一下&#xff0c;发生了一些问题&#xff1a; 当时运行了一下这个代码&#xff1a; pip install torchvision --upgrade 导致了环境中包的混乱&#xff1a; 只能说欲哭无泪&#xff0c;当…

代码随想录day21--回溯基础

理论基础 回溯法也可以叫回溯搜索法&#xff0c;它是一种搜索的方式。我们在二叉树中也多次提到了回溯。回溯是递归的副产品&#xff0c;只要使用了递归就会有回溯&#xff0c;我们我们就可以笼统的将回溯函数称为递归函数 回溯法解决的问题 1.组合问题&#xff1a;N个数里面…

IMX6ULL移植U-Boot 2022.04

目录 目录 1.编译环境以及uboot版本 2.默认编译测试 3.uboot中新增自己的开发板 3.编译测试 4.烧录测试 5.patch文件 1.编译环境以及uboot版本 宿主机Debian12u-boot版本lf_v2022.04 ; git 连接GitHub - nxp-imx/uboot-imx: i.MX U-Boot交叉编译工具gcc-arm-10.3-2021.0…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_2

《剑指Offer》笔记&题解&思路&技巧&优化_Part_2 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f353;&#x1f353;&#x1f353;广度优先搜索BFS&#x1f353;&#x1f353;&#x1f353;深度优先搜索DF…

esp8266-01s WIFI模块使用(一)- AT指令

时间记录&#xff1a;2024/2/15 一、注意事项 &#xff08;1&#xff09;使用英文双引号表示字符串数据 &#xff08;2&#xff09;默认波特率115200 &#xff08;3&#xff09;AT指令以“\r\n”结尾 &#xff08;4&#xff09;3.3V电源接口先连接单片机的3.3V&#xff0c;如…

Spring 用法学习总结(二)之基于注解注入属性

Spring学习 5 基于注解方式创建对象6 基于注解注入属性 5 基于注解方式创建对象 注解是代码的特殊标记&#xff0c;可以简化xml配置&#xff0c;格式&#xff1a;注解名称(属性名称属性值&#xff09;&#xff0c;可以作用在类、方法、属性上 以下注解都可以创建bean实例 Com…

VS Code中的JDK设置

在VS Code使用中&#xff0c;如果机器只安装了一个版本的JDK版本&#xff0c;一般不需要特别关注JDK 的配置&#xff0c;但是在以下状况下&#xff0c;需要对JDK进行特别的配置&#xff1a; 机器有多个JDK版本&#xff0c;不同的项目使用不同的JDK版本项目使用的JDK版本较低&a…

【web | CTF】BUUCTF [护网杯 2018] easy_tornado

天命&#xff1a;这题是框架性的漏洞&#xff0c;Python的web服务器框架&#xff0c;应该已经比较古老了 开局先看一下三个文件 简单阅读后会发现&#xff0c;这里存在文件包含漏洞&#xff0c;可以直接读取文件&#xff0c;但是有一个哈希值校验 一开始我以为是扫描文件后得到…

vue3 之 商城项目—支付

支付模版 pay/index.vue <script setup> const payInfo {} </script> <template><div class"xtx-pay-page"><div class"container"><!-- 付款信息 --><div class"pay-info"><span class"ic…

腾讯云4核8G服务器够用吗?能支持多少人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

Linux实用指令

Linux实用指令 1.指定运行级别 运行级别说明&#xff1a; 0 &#xff1a;关机 1 &#xff1a;单用户【找回丢失密码】 2&#xff1a;多用户状态没有网络服务 3&#xff1a;多用户状态有网络服务 4&#xff1a;系统未使用保留给用户 5&#xff1a;图形界面 6&#xff1a;系统重…

山西电力市场日前价格预测【2024-02-11】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2024-02-11&#xff09;山西电力市场全天平均日前电价为121.99元/MWh。其中&#xff0c;最高日前电价为475.98元/MWh&#xff0c;预计出现在19:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

姿态传感器MPU6050模块的基本使用总结

以下两篇文章可作为参考&#xff1a; 姿态传感器MPU6050原理及应用超详细讲解 - 采芯网 基于STM32的四旋翼无人机项目&#xff08;二&#xff09;&#xff1a;MPU6050姿态解算&#xff08;含上位机3D姿态显示教学&#xff09;-CSDN博客 基本介绍 随着科技的发展&#xff0c;我们…

Write operation failed: computed value is readonly问题解决

源代码&#xff1a; // 封装倒计时逻辑函数 import { computed, ref } from vue import dayjs from dayjs export const useCountDown () > {// 1.响应式数据const time ref(0)// 格式化时间const formatTime computed(()>dayjs.unix(time.value).format(mm分ss秒))/…

表的连接

目录 内连接实现效果 使用左外连接&#xff0c;将所有的员工信息都显示出来&#xff0c;即便他没有对应的部门 使用右外连接&#xff0c;将所有的部门信息都显示出来 查询每个员工的编号、姓名、职位&#xff0c;以及所在各部门的领导姓名、领导职位 确定所需要的数据表 确…

了解Ping、Wget、端口、Netstat和Curl命令

1. 端口 1.1 什么是端口&#xff1f; 端口是一种用于标识不同应用程序或服务的逻辑通道。它是一个数字&#xff0c;取值范围从0到65535。常见的端口有一些已经被标准化&#xff0c;比如HTTP使用的80端口&#xff0c;HTTPS使用的443端口。 1.2 了解端口状态 使用netstat -an…

springboot191教师工作量管理系统

简介 【 毕设 源码 推荐 javaweb 项目】 基于 springbootvue 的教师工作量管理系统&#xff08;springboot191&#xff09; 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后…

深度学习的新进展:探索人工智能的未来

文章目录 &#x1f4d1;引言深度学习技术概述计算机视觉领域的深度应用自然语言处理的深度革命跨领域应用的深度拓展深度学习的挑战与未来展望结语 &#x1f4d1;引言 在科技日新月异的今天&#xff0c;深度学习作为人工智能领域的一颗璀璨明珠&#xff0c;正在引领着技术创新…

计算机服务器中了360后缀勒索病毒怎么办?360后缀勒索病毒处理流程

网络技术的不断应用与发展&#xff0c;为企业的生产运营提供了有利保障&#xff0c;越来越多的企业走向数字化办公模式&#xff0c;并且企业的发展离不开数据支撑&#xff0c;重视数据安全成为了众多企业关心的主要话题。春节前后&#xff0c;云天数据恢复中心接到很多企业的求…